c++ - Xcode:malloc 大小似乎无关紧要

标签 c++ objective-c c xcode malloc

<分区>

在下面的代码中,我可以将 malloc 的参数更改为任何值(至少是我尝试过的值),一切看起来都很好。

例如,我可以将“3 * sizeof(float)”更改为“3 * sizeof(char)”,甚至可以更改为零。而且我仍然可以获得“正确”的结果。堆大小似乎根本不重要。

这让我很困惑。怎么会这样?

代码在 Xcode 5 中编写和运行。

float *favorites = malloc(3 * sizeof(float));

favorites[0] = 3.14158;
favorites[1] = 2.71828;
favorites[2] = 1.41421;

for (int i = 0; i < 3; i++) {
    printf("%.4f is favorite %d\n", favorites[i], i);
}

free(favorites);
favorites = NULL;

最佳答案

这是因为通过这样做,您的程序会调用 undefined behavior .一旦 UB 被调用,所有的赌注都被取消了。您可能会得到预期或意外的结果。

现在尝试在不为 favoritee 分配内存的情况下执行此操作

float *favorites ;
...

看看会发生什么?

关于c++ - Xcode:malloc 大小似乎无关紧要,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22588201/

相关文章:

ios - 如何共享 View Controller 的 View 布局

iOS 在自定义类中处理 didSelectRowAtIndexPath

c - LabVIEW 中的错误像素校正?

c++ - 另一个对象重用对象的空间

c++ - 第二次无法捕获段错误

c++ - 如何在不到 1 秒的时间内计算 2^x mod n = 1

c++ - #pragma 警告 - 文件特定?

ios - 在具有委托(delegate)的多个 UIViewController 队列上使用解雇 View Controller

c - 为什么套接字会拒绝连接?

来自不兼容指针类型的 C 指针数组赋值