如何知道C函数是否正常工作?

EMB*_*MBT 3 c memory

我看到以下代码的结果存在一些差异:

#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.

问候.

Dav*_*har 8

在释放它之后使用指针会导致未定义的行为.

这意味着该程序可能会打印垃圾,打印字符串的前一内容,擦除硬盘驱动器,或使猴子从底部飞出,仍然符合C标准.

没有办法查看指针并"知道内存何时被释放".这取决于你作为程序员来跟踪.


Cal*_*leb 5

如果调用free(),则该函数返回时将释放内存.这并不意味着内存会被立即覆盖,但使用任何你称之为free()的指针仍然是不安全的.

一旦释放了指针变量,总是将nil分配给指针变量是个好主意.这样,你知道非零指针是安全的.