【发布时间】:2018-02-10 03:47:25
【问题描述】:
我编写了以下程序:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void main(int argc, char *argv[]){
char *input;
input = (char*)malloc(16);
printf("input is : %s\n", input);
}
当我运行它时:
./test `python -c 'print "A"*5000'`
它不会崩溃。而是打印数据。
当我在printf 之后使用free(input) 时,它会崩溃。
为什么会这样?
【问题讨论】:
-
因为它的未定义行为。
-
有没有一种可靠的方法可以在没有 free() 的情况下创建崩溃
-
您描述的行为没有意义。您确定这是您正在运行的确切代码吗?
-
使用内存检查器如 valgrind 来查找此类错误。
-
在得到答案后不要实质性地改变问题。如果您觉得必须编辑问题,请添加带有适当注释的程序的第二个版本,例如 — “糟糕:我错过了
strcpy()操作。代码看起来像这样。”但最好在提问之前让问题中的代码正确。漏掉关键的台词是粗心大意的表现。
标签: c malloc heap-corruption