Ita*_*ssi 4 c dynamic-allocation
我开始学习C中的动态内存分配,到目前为止,我已经阅读过malloc()函数,并没有初始化新分配的块的值.
这是在较新版本的C中改变了吗?C99和C11?
我正在使用Xcode执行以下操作,所有值都使用0进行初始化.
double *p = (double *) malloc(5 * sizeof(double));
printf("Address of p0 = %p | Valoe of p0 = %f\n", p, *p);
printf("Address of p1 = %p | Valoe of p1 = %f\n", p+1, *(p+1));
printf("Address of p2 = %p | Valoe of p2 = %f\n", p+2, *(p+2));
printf("Address of p3 = %p | Valoe of p3 = %f\n", p+3, *(p+3));
printf("Address of p4 = %p | Valoe of p4 = %f\n", p+4, *(p+4));
Run Code Online (Sandbox Code Playgroud)
我认为这只适用于函数calloc().
Ani*_*nge 10
似乎是实现定义的行为.在Visual Studio 2012,C编译器上,我看不到这样的初始化.
更重要的是,请阅读此问题中所选答案的"捕获":
说,由于安全原因,操作系统可能会"给你"归零值.看起来,这是一个实现定义的行为.
建议:它不是标准行为,并且破坏了代码的可移植性.确保初始化值而不依赖于OS提供的数据.
| 归档时间: |
|
| 查看次数: |
1131 次 |
| 最近记录: |