PTT
Submit
Submit
选择语言
正體中文
简体中文
PTT
C_and_CPP
addresssanitizer heap-buffer-overflow 错误
楼主:
hydebeast
(雷枪)
2020-08-16 21:44:56
大家好
https://reurl.cc/N6akmq
小弟在写leetcode第八题的时候 运行程式码出现这个错误 addresssanitizer heap-buffer-overflow
我的程式码 https://glot.io/snippets/fqanzjusa4
这个程式码在自己的compiler上会过 而且试过几种input感觉应该没问题
就是不知道为何在leetcode上跑会出现那个错误@@ 我有试着搜寻一下那个错误的意思是什么 但小弟初学实在有点看不懂... 不知有没有大大可以简单解释一下orz
我程式码的逻辑:
建三个vector : no_space, no_sign, ans_v
先用no_space把str从第一个非空白的地方开始存起来
再判断no_space开头是否有正负号,有的话纪录下来,然后用no_sign把no_space除了开头正负号以外的部分再存起来
接着用ans_v把no_sign里遇到第一个非数字之前的数字部分存下来
最后把ans_v代表的数字计算一下再回传
感谢各位
作者:
LPH66
(-6.2598534e+18f)
2020-08-16 21:53:00
这个错误最常见的原因是阵列存取越界, 特别是容器类的存取检查一下你的 vector 存取会不会在某个奇怪的时候越界
作者:
nh60211as
2020-08-16 23:12:00
你的while(no_sign[i] >= 48 && no_sign[i] <= 57)在全部的文字都是有效数字的时候会读到no_sign[end+1]
作者:
Killercat
(杀人猫™)
2020-08-16 23:32:00
一个小技巧,STL老问题了vector少用[]多用.at()[]完全不会做任何检查 所有的out-of-bound都是undefined behavior 什么奇怪的东西都会跑出来.at()则会相当尽责地做boundary check跟丢std::exception出来,所以别用[]了
https://tinyurl.com/lszrg7v
看第三段Portable programs......那行
作者:
loveme00835
(发箍)
2020-08-17 00:09:00
为了 portability 更不应该用 at(), 因为在需要效能的时候会因为 at() 快不起来, 而且因为编译器会产生例外处理的程式码, 所以也要特别注意接口的设计是否合理, 如果需要检查建议使用 BOOST_ASSERT() 这类可以切换行为的 contract programming lib, 静态大小就用 bounded_integer, 到 C++23 时稍微改一下就好了学希佳佳第一件事就是把 cplusplus.com这网站 ban 掉
作者:
Killercat
(杀人猫™)
2020-08-17 10:09:00
这个就看你喜欢哪种风格了,但是undefined behavior绝对是最有害的,那么有把握能做到完全检查的话,你说的应该就没错,但是实务上这几乎是不可能的另外我觉得把std::exception视为洪水猛兽...maa,也是一种主流学说啦,只是我个人觉得不太赞同就是另外其实portability跟效能无关 不然java早就吃屎啦...另外BOOST_ASSERT()是个非常好的解决方案,这我赞同反正就别搞到不想用std::exception结果跑去setjmp就好
楼主:
hydebeast
(雷枪)
2020-08-17 12:19:00
感谢各位!问题的确是出在n大讲的部分 其他大大的建议我也会去研究一下的m(_ _)m
继续阅读
[问题] header的小问题
joshddd
[问题] 制作training data 问题
magic83v
[问题] 关于类型转换
asdfg1597860
[问题] opencv 学习
spong
[问题] 一般变量与const变量 在表头档问题
anoymouse
[问题] 计时长度不相同的问题
s4300026
[问题] codewar网站做的练习题有点问题
mouwat
[问题] 如何开发用opencv写的视觉程式
su27
[问题] class pointer 没new也能用其function
herepost
[问题] C++考题 - [](){}()是什么意思
wawi2
Links
booklink
Contact Us: admin [ a t ] ucptt.com