gpt4 book ai didi

c - 存储比堆更多的字节

转载 作者:太空宇宙 更新时间:2023-11-04 05:28:57 24 4
gpt4 key购买 nike

为什么下面的代码成功了,尽管我只是使用 malloc() 在堆上占用了 1 个字节:

char* sp=(char*)malloc(1);
strcpy(sp,"aaaaa");

sp 有 1 个字节的堆大小,它可以处理超过 1 个字节的 aaaa!怎么来的!

我使用的是 MS VS 2010。

最佳答案

这称为未定义行为。仅仅因为您的 编译器在您的 机器上似乎对此没有问题,并不意味着另一个编译器或另一个平台将表现相同。 (提示:由于此用例的简单性,您没有看到任何不良影响。任何更复杂的情况都会导致重大问题。)

实际上,分配溢出了您的分配。在这种情况下会发生什么取决于您的编译器和特定的 C/C++ 运行时。在某些平台上,这会导致段错误或访问冲突(尤其是在使用 Electric Fence 或 Valgrind 等调试辅助工具时)。

像这样的代码的最佳情况场景是立即崩溃!如果代码没有崩溃,那么您可能破坏了另一个内存分配,并且您的应用程序稍后会崩溃或破坏数据——一个所谓的“定时炸弹”错误。定时炸弹 更难调试,因为应用程序崩溃的点可能在任何地方,而且很可能远离错误代码。

关于c - 存储比堆更多的字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13161940/

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