2011-03-17 72 views
3

我已经看到了下面的代码的结果有些差异:如何知道C函数是否可用?

#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 gargabge caracters,没什么在Linux和Unix系统中打印“Hello World”。

有没有办法检查指针的状态以知道内存何时被释放?

我觉得这种打印机制不可能一直都是可信的。

Thnaks。

问候。

+2

释放指针并不一定会改变它指向的实际内存。 – Gabe 2011-03-17 02:22:15

回答

8

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

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

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

3

简单ansewr:你不能检查,如果指针已经在C.已释放不同的行为可能是由于不同的编译器,因为使用指针释放它是不确定的,你可以得到各种行为后(包括SEGFAULT和程序终止)。

如果你想检查你是否使用自由属性,并且你的程序没有内存泄漏,那么使用Valgrind之类的工具。

5

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

一旦你释放了一个指针变量,总是把nil赋给一个指针变量是个好主意。这样,你知道非零指针可以安全使用。

+1

+1 - 当你调用'free()'时,内存被释放。 – detly 2011-03-17 02:47:44

相关问题