【发布时间】:2015-01-31 05:01:03
【问题描述】:
为什么我使用以下程序没有任何错误?
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[]){
char *pStr = (char*) malloc(25);
free(pStr);
strcpy(pStr, "foo");
printf("%s\n", pStr);
return 0;
}
free(pStr) 不应该阻止我写信到那个地址吗?难道我不用重新分配空间才能使用吗?
【问题讨论】:
-
在任何合同、文档、示例代码等中,它是否说 C 语言会阻止您写入内存?如果它没有在任何地方这么说,你是从哪里得到这个想法的?
-
“未定义”行为的确切含义是:它可能会出现段错误,它可能会崩溃,它可能会让恶魔飞出你的鼻子,......或者它可能会完美运行,但永远不会给你任何线索坏了。
-
C 编程语言比汇编语言高出一步。它是高级编程语言中最低的。因此,它允许您做任何您想做的事情,并假设您知道自己在做什么。新手没有安全网。
-
我认为它是低级语言中最高的,但是是的,这就是基本思想。
-
Dennis Ritchie 有句名言:“C 具有汇编的所有功能,具有汇编的所有便利”
标签: c memory-management heap-memory