蘋果小豬研究室
Ask or search…
K

Dangling pointer(懸置指標)

在C語言中,如果一個指標不再使用了,那麼我們應該要在釋放指標所指的記憶體之後,將指標指定為空值(NULL)。
#include <iostream>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
int main(int argc, char * argv[])
{
char *cmd = NULL;
cmd = new char[16];
printf("cmd: %p\n", cmd);
if(cmd) {
delete [] cmd;
}
printf("delete cmd: %p\n", cmd);
cmd = (char*)malloc(sizeof(char)*16);
printf("cmd: %p\n", cmd);
if( cmd ) {
free(cmd);
}
printf("free cmd: %p\n", cmd);
return 0;
}
myliao@my-thinkpad:/tmp$ g++ play.cpp -o play myliao@my-thinkpad:/tmp$ ./play cmd: 0x9943008 delete cmd: 0x9943008 cmd: 0x9943008 free cmd: 0x9943008 從程式的結果來看,可以知道,我們 free cmd 之後,cmd 指標並不會自動改為NULL。 這會有什麼問題呢? 如果說你的指標是要重複使用的,如果沒有在 free() 之後,手動將指標修改為 NULL,則之後的程式碼會無法得知該指標所指向的記憶體已經被釋放了。