核心转储但 gdb 无法找到确切位置
Core Dumps but gdb is not able its find the exact location
假设我有一个数组 A[10] 和一些其他变量
我正在将其初始化为
for(int i=0;i<20;i++) //intentionally 20
A[i]=0;
所以当你 运行 这个 LIBRARY 时,它会初始化数组而没有任何错误并且访问也是可能的但是 gdb 在其他地方提供核心转储(就我而言,它显示其他变量的内存已更改)
为什么在阵列初始化期间不提供核心转储?
IN c/c++ 你没有对 运行 超出数组范围的保护,一旦你访问不属于进程的内存就会发生崩溃。
所以只要你越界并且像其他变量一样只在堆栈或堆中写入你自己的内存......程序不会崩溃,但其他变量会改变,如果你通过这个改变指针可能会导致未来崩溃,因为指针随后将指向某个随机内存地址
PODs 在编译期间没有越界错误检查,例如原始数组,仅在 运行 期间检查。您正在调用 undefined behaviour. That being said prefer std::vector or std::array 到 C++ 中的原始(C 样式)数组。
假设我有一个数组 A[10] 和一些其他变量
我正在将其初始化为
for(int i=0;i<20;i++) //intentionally 20
A[i]=0;
所以当你 运行 这个 LIBRARY 时,它会初始化数组而没有任何错误并且访问也是可能的但是 gdb 在其他地方提供核心转储(就我而言,它显示其他变量的内存已更改)
为什么在阵列初始化期间不提供核心转储?
IN c/c++ 你没有对 运行 超出数组范围的保护,一旦你访问不属于进程的内存就会发生崩溃。 所以只要你越界并且像其他变量一样只在堆栈或堆中写入你自己的内存......程序不会崩溃,但其他变量会改变,如果你通过这个改变指针可能会导致未来崩溃,因为指针随后将指向某个随机内存地址
PODs 在编译期间没有越界错误检查,例如原始数组,仅在 运行 期间检查。您正在调用 undefined behaviour. That being said prefer std::vector or std::array 到 C++ 中的原始(C 样式)数组。