返回信息流起因是自己的程序出现了这样的报错,然后通过cout 打印信息定位到了出错在一行初始化vector的语句。
然而,把这个语句单独放在main函数前面完全没错
受这篇博文的启发:
https://blog.csdn.net/u011334536/article/details/106150555
我在那行语句之前进行排查,发现确实有越界访问数组的行为。
想请问为什么编译器不会在越界访问数组的时候报错,而是在malloc出现异常才报错。
编译器:g++ (Ubuntu 5.4.0-6ubuntu1~16.04.12) 5.4.0 20160609
这是一条镜像帖。来源:北邮人论坛 / cpp / #102613同步于 2023/4/20
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
关于 malloc(): memory corruption 的问题
zhangwentai
2023/4/20镜像同步13 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
这种能在论坛发贴解决的问题感觉chatgpt都能搞定。
试了一下,这个是回复:
在C++中,访问越界数组元素是未定义行为(Undefined Behavior),这意味着编译器不会强制执行任何特定的行为。许多因素可能会影响程序在出现未定义行为时的表现,例如编译器实现、操作系统、硬件等等。
在您的情况下,可能是由于访问越界导致的未定义行为在运行时未被检测到,这使得程序的行为变得不可预测。而程序在初始化vector时,需要动态分配内存,因此当访问越界导致内存出现异常时,才会在malloc处报错。
为了避免这种未定义行为和内存越界访问,您应该始终确保您的程序在使用数组或指针时不会访问超出其边界的元素,并使用valgrind等工具来检测内存错误。
ChatGPT好像说了些什么,但好像又什么都没说。。。并没有回答楼主的问题。
【 在 buptrh 的大作中提到: 】
: 这种能在论坛发贴解决的问题感觉chatgpt都能搞定。
: 试了一下,这个是回复:
: ............
如果你感兴趣,可以看看这个问题:
如果编译器遇到未定义行为把硬盘格式化了,需要负法律责任吗?
https://www.zhihu.com/question/47162882