gpt4 book ai didi

c - malloc 不确定性行为

转载 作者:行者123 更新时间:2023-11-30 18:42:10 26 4
gpt4 key购买 nike

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
int *arr = (int*)malloc(10);
int i;
for(i=0;i<100;i++)
{
arr[i]=i;
printf("%d", arr[i]);
}
return 0;
}

我正在运行上面的程序,对 malloc 的调用将分配 10 个字节的内存,并且由于每个 int 变量占用 2 个字节,所以在某种程度上我可以存储 5 个每个 2 个字节的 int 变量,从而构成我的总共 10 个字节我动态分配。

但是在调用 for-loop 时,它允许我输入值,甚至直到第 99 个索引并存储所有这些值。因此,在某种程度上,如果我存储 100 个 int 值,则意味着 200 个字节的内存,而我只分配了 10 个字节。

那么这段代码的缺陷在哪里,或者 malloc 的行为如何?如果 malloc 的行为以这种方式是不确定的,那么我们如何实现正确的动态内存处理?

最佳答案

缺陷在于您的期望。你对编译器撒了谎:“我只需要 10 个字节”,而你实际上写了 100*sizeof(int) 字节。超出分配区域的写入是未定义的行为,任何事情都可能发生,从什么也没有发生到您期望的崩溃。

关于c - malloc 不确定性行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18032027/

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