我看到以下代码的结果存在一些差异:
#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);
}
Run Code Online (Sandbox Code Playgroud)
让我解释:
在根据操作系统对printf的第三次调用中,我获得了不同的结果,在Windows中使用了gargabge caracters,在Linux和Unix系统中没有打印"Hello World".
有没有办法检查指针的状态,以了解内存何时被释放?
我认为这种印刷机制一直不可信.
Thnaks.
问候.
在释放它之后使用指针会导致未定义的行为.
这意味着该程序可能会打印垃圾,打印字符串的前一内容,擦除硬盘驱动器,或使猴子从底部飞出,仍然符合C标准.
没有办法查看指针并"知道内存何时被释放".这取决于你作为程序员来跟踪.
如果调用free(),则该函数返回时将释放内存.这并不意味着内存会被立即覆盖,但使用任何你称之为free()的指针仍然是不安全的.
一旦释放了指针变量,总是将nil分配给指针变量是个好主意.这样,你知道非零指针是安全的.