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

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

#include  #include  #include  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中使用了gargabge caracters,在Linux和Unix系统中没有打印“Hello World”。

有没有办法检查指针的状态,以了解何时释放内存?

我认为这种印刷机制一直不可信。

Thnaks。

问候。

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

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

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

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

一旦释放了指针变量,总是将nil分配给指针变量是个好主意。 这样,您就知道非零指针可以安全使用。

简单的ansewr:你无法检查指针是否已经在C中被释放。不同的行为可能是由于不同的编译器,因为在释放它之后使用指针是未定义的,你可以获得各种行为(包括SEGFAULT和程序终止) )。

如果你想检查你是否使用免费财产,并且你的程序没有内存泄漏,那么使用像Valgrind这样的工具。