我发现以下代码的结果存在一些差异:
#include <stdio.h>
#include <malloc.h>
#include <string.h>
int main(void)
{
char* ptr;
ptr = (char*)malloc(sizeof(char) * 12);
strcpy(ptr, "Hello World");
printf("%s\n", ptr);
printf("FREEING ?\n");
free(ptr);
printf("%s\n", ptr);
}
让我解释:
在第三次调用 printf 时,根据操作系统,我得到不同的结果,Windows 中的垃圾字符,Linux 中没有任何内容,而在 Unix 系统中“Hello World”被打印。
有没有办法检查指针的状态以了解内存何时被释放?
我认为印刷的这种机制始终不能被信任。
Thnaks.
问候。
释放指针后使用它会导致未定义的行为。
这意味着该程序可能会打印垃圾、打印字符串以前的内容、擦除您的硬盘驱动器或让猴子从您的屁股里飞出来,但仍然符合 C 标准。
没有办法查看指针并“知道内存何时被释放”。作为程序员,您有责任跟踪。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)