是否有可能,在什么条件下,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
答案 0 :(得分:2)
如果存储元素的页面受到写保护,则会发生这种情况。 允许读取,但不写入(如果尝试,则进程被杀死)。
如果您尝试修改存储在只读部分中的字符串,则会发生C和C ++。
#include <stdio.h>
int main(void)
{
char *foo = "hello";
printf("%s\n", foo); // ok
foo[0] = 'H'; // usually a crash
}
答案 1 :(得分:1)
如果您的数组位于只读内存中(例如,定义为const
或您将其底层内存类型更改为只读),那么在尝试更改阵列时可能会崩溃。