【发布时间】:2011-03-31 09:32:29
【问题描述】:
char *cp = (char *) malloc(1);
strcpy(cp, "123456789");
puts(cp);
在 gcc (Linux) 和 Visual C++ Express 上的输出都是“123456789”,这是否意味着当有空闲内存时,我实际上可以使用比 malloc() 分配的更多的内存?
为什么malloc(0) 不会导致运行时错误?
谢谢。
【问题讨论】:
-
正如您在答案中看到的那样,这是一个坏主意 :) 为确保您没有那种代码,您可以使用 valgrind 或 yamd 之类的工具。我很久没有做 C 开发人员了,所以我不知道当前的工具 :)
-
是的,当然这是个坏主意,我只是想知道为什么 c runtime 允许我这样做
-
它允许你这样做,因为检查意味着你必须保持每个 malloc()ed 对象的分配大小,并检查该对象的每个可能的访问是否违反了它的界限,C 的设计者认为这样的运行时检查成本太高,无法在使用 C 程序的环境中始终执行。 (同时开发的 Pascal 确实会执行此类检查。)
-
因为他们使用的任何算法都不会浪费时间检查以确保人们没有弄乱它
-
@woongiap:那你还没有从线程中学到东西。它不起作用,它正在进入未定义的行为。您应该学会将工作与输出分开。 “输出是正确的。”是对作品的更糟糕的定义。
标签: c