我想了解这里发生了什么,更准确地说,为什么我在写入内存位置时没有收到分段错误,根据我的理解,没有分配。
假设我想定义一个int的二维数组( testptr
)。 一维( 4 )静态分配(作为“数组”),第二维( 2 )动态分配(作为“指针”)。
// First dimension 4 rows static int *testptr[4]; for (i=0; i<4; i++) testptr[i] = calloc(2, sizeof(int)); // Second dimension 2 columns "dynamically" (in this example it is really just a constant)
现在我写信给一些地方:
testptr[0][0] = 5; testptr[1][0] = 6; testptr[2][1] = 7; testptr[3][1] = 7;
以上所有我希望工作正常,因为它们在4×2“arrays”内。
现在我写一个不应该分配的位置:
testptr[2][3] = 8;
并确保我写信给他们中的许多人:
for (i=0; i<1000; i++) testptr[3][i] = i;
在这些都没有我得到分段错误或其他错误。
谢谢你的回答。
您的程序调用未定义的行为 。 它会给出预期或意外的结果。 无法保证访问数组越界会产生分段错误,否则会导致硬盘崩溃!
以上就是c/c++开发分享为什么我没有得到SIGSEGV?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/522812.html