gpt4 book ai didi

c - 在 malloc() 之后写入越界指针不会导致错误

转载 作者:太空狗 更新时间:2023-10-29 17:14:10 25 4
gpt4 key购买 nike

当我尝试下面的代码时,它工作正常。我错过了什么吗?

main()
{
int *p;
p=malloc(sizeof(int));
printf("size of p=%d\n",sizeof(p));
p[500]=999999;
printf("p[0]=%d",p[500]);
return 0;
}

我用 malloc(0*sizeof(int)) 或任何东西试过了,但效果很好。该程序仅在我根本不使用 malloc 时崩溃。所以即使我为数组 p 分配 0 内存,它仍然正确地存储值。那么,为什么我还要为 malloc 而烦恼呢?

最佳答案

它可能看起来 工作正常,但它一点也不安全。通过在分配的内存块之外写入数据,您将覆盖一些不应该覆盖的数据。这是导致段错误和其他内存错误的最主要原因之一,您观察到它似乎在这个简短的程序中起作用,这使得追查根本原因变得如此困难。

阅读this article ,特别是有关内存损坏的部分,以开始了解问题。

Valgrind是分析内存错误(例如您提供的错误)的出色工具。

@David 发表了很好的评论。比较运行结果your code运行 the following code .请注意,后者会在 ideone.com(单击链接)上导致运行时错误(几乎没有有用的输出!),而前者会像您所经历的那样成功。

int main(void)
{
int *p;
p=malloc(sizeof(int));
printf("size of p=%d\n",sizeof(p));
p[500]=999999;
printf("p[0]=%d",p[500]);
p[500000]=42;
printf("p[0]=%d",p[500000]);
return 0;
}

关于c - 在 malloc() 之后写入越界指针不会导致错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4534780/

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