【发布时间】:2017-01-04 22:23:47
【问题描述】:
我正在编写一些代码,我使用了函数calloc。
我知道,当传递给该函数的第一个和第二个参数都为零时,该函数将为 0 个元素分配必要的空间,每个元素的大小为 0,但奇怪的是。
即使 n > 0,这个程序也能正常工作。为什么会这样?我认为它应该显示错误,因为我试图在不存在的数组位置写入。谢谢!
#include <stdio.h>
#include <stdlib.h>
int main(){
int n;
scanf("%d", &n);
int *test = calloc(0, 0);
for(int i = 0; i < n; i++){
test[i] = 100;
printf("%d ", test[i]);
}
return 0;
}
【问题讨论】:
-
未定义的行为意味着任何事情都可能发生。
-
没有语法错误 =
c中没有编译错误。你所编译的东西很好,但是你写的东西超出了你的内存区域(当n > 0),这是未定义的行为。 -
你不会在 c 中遇到这样的错误。它只会尝试将其写入指定的地址。作为程序员,你必须小心确保它不会发生。