有没有可能,在什么条件下,Linux内核会因为内存写冲突而不是由于同一内存位置上的内存访问冲突而结束程序的执行。
例如
//x is a pointer to a vector of structs
if( (*x)[i].member )
break; //doesn't crash
if( (*x)[i].member )
(*x)[i].member = 1; //crashes, even though member is not used
//elsewhere in the program
发布于 2012-07-15 07:26:42
如果存储元素的页面是写保护的,就会发生这种情况。允许读取,但不允许写入(如果尝试这样做,进程将被终止)。
如果您尝试修改存储在只读部分中的字符串,则C和C++会发生这种情况。
#include <stdio.h>
int main(void)
{
char *foo = "hello";
printf("%s\n", foo); // ok
foo[0] = 'H'; // usually a crash
}
发布于 2012-07-15 07:25:47
如果您的数组位于只读内存中(例如,定义为const
或将其底层内存类型更改为只读),则在尝试更改数组时可能会崩溃。
https://stackoverflow.com/questions/11490219
复制相似问题