gpt4 book ai didi

c - 为什么我可以覆盖一 block 分配了 0 个空间的内存?

转载 作者:太空狗 更新时间:2023-10-29 15:21:39 24 4
gpt4 key购买 nike

为什么我给数组分配了一个大小为0的空间,但我仍然可以覆盖那 block 内存?

#include<stdio.h>

int main(int argc, char** argv)
{
int * array = malloc((sizeof(int)) * 0);
int i;
for(i = 0; i < 10; i++)
array[i] = i;

for(i = 0; i < 10; i++)
printf("%d ", array[i]);
}

最佳答案

当您越界访问索引时,您的代码调用了未定义的行为 -

 for(i = 0; i < 10; i++)
array[i] = i;

您不会收到关于此类事情的任何警告或错误,但这在标准中记录为 UB

在那种情况下输出可以是任何东西。

对于这一行——

int * array = malloc((sizeof(int)) * 0);

C 标准说 -

If the size of the space requested is zero, the behavior is implementation-defined: either a null pointer is returned, or the behavior is as if the size were some nonzero value, except that the returned pointer shall not be used to access an object.

这里它的返回值可能是也可能不是NULL pointer。但是很明显,这个指针不应该用来访问任何对象。

关于c - 为什么我可以覆盖一 block 分配了 0 个空间的内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32566544/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com