我为 char 指针分配了一些空间,并尝试访问超出分配的空间,但仍然没有出现段错误。我的代码如下:
char *src = malloc(4);
strcpy(src, "1234");
char *temp;
for(int i = 0 ; i<5 ; i++) {
temp = src;
src ++;
printf("ite ch %c\n",src[0]);
}
printf("Still no segfault %s\n",temp);
现在我的问题是:如何超出分配的空间?我不应该出现段错误吗?
最佳答案
当您像此处所做的那样写入超过由 malloc 分配的内存块末尾时,您将调用 undefined behavior .
未定义的行为意味着无法预测程序的行为。它可能会崩溃,可能会输出奇怪的结果,或者可能看起来工作正常。此外,看似无关的更改(例如添加未使用的局部变量或调用 printf 进行调试)可能会改变未定义行为的表现方式。
总而言之,对于未定义的行为,仅仅因为程序可能崩溃并不意味着它会崩溃。
关于c - 访问超出分配的空间并且不会出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46698372/