【发布时间】:2014-03-23 07:32:09
【问题描述】:
在下面的代码中,我可以将 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;
【问题讨论】:
-
内存通常以 16 字节的倍数的块形式分配。由于您的数组仅占用 12 个字节,因此您请求的内存量并不重要。如果您希望程序崩溃,请尝试用更多的条目填充您的数组。
-
谢谢@JensGustedt,我确实尝试过先搜索类似的问题,但在您的评论中没有找到。
-
对我来说,该问题的参考在您问题的右栏中给出。这强烈表明网站应该在输入您的问题文本时提出建议。
-
谢谢@JensGustedt,你是对的。以后我会更加关注那个部分。不过我不想删除我的问题,所以我将其标记为重复。
-
你也可以写:
favorites[3]=3.333;favorites[4]=4.4444;favorites[5]=5.65555;...等等等等。谁在乎应用程序是否意外崩溃。
标签: c++ objective-c c xcode malloc