[問題] 物件指標為NULL,其成員指標變數的存取
( *[1m *[m 為色碼,可以按 Ctrl+V 預覽會顯示的顏色 )
( 未必需要依照此格式,文章條理清楚即可 )
遇到的問題: (題意請描述清楚)
當物件指標為NULL,存取其成員的指標變數,造成Access violation。
希望得到的正確結果:
避免Access violation。
程式跑出來的錯誤結果:
Access violation。
開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux)
VC++, VS 2008
有問題的code: (請善用置底文標色功能)
舉例:
class CLASSA {
public:
CLASSA() {
testp = NULL;
// 以下假設呼叫一個函數來new testp,略
}
~CLASSA() {
if(testp != NULL) {
delete testp;
testp = NULL;
}
}
int doSomething();
int *testp;
};
int CLASSA::doSomething() {
// 這裡開始存取testp
return 0;
}
CLASSA *class_a = NULL;
int main() {
// class_a尚未new,但是故意呼叫
class_a->doSomething();
// 以後是正常的code,會new class_a和做一些操作,最後delete class_a
return 0;
}
補充說明:
在故意呼叫的情況下,class_a還沒有new過,
testp連NULL都不是,程式執行到doSomething()時,發生Access violation。
我有想過改成
int CLASSA::doSomething() {
if(this != NULL) {
//原本存取testp的code
}
else {
return 1;
}
return 0;
}
因為不希望隨便一個人加一段code程序就被毀掉,
可是不確定這是標準的寫法,想請教一般標準的寫法如何?
謝謝。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.25.240.120
推
10/29 11:56, , 1F
10/29 11:56, 1F
→
10/29 11:57, , 2F
10/29 11:57, 2F
→
10/29 11:58, , 3F
10/29 11:58, 3F
→
10/29 11:58, , 4F
10/29 11:58, 4F
→
10/29 12:01, , 5F
10/29 12:01, 5F
→
10/29 12:01, , 6F
10/29 12:01, 6F
推
10/29 12:07, , 7F
10/29 12:07, 7F
→
10/29 12:08, , 8F
10/29 12:08, 8F
→
10/29 12:10, , 9F
10/29 12:10, 9F
→
10/29 12:11, , 10F
10/29 12:11, 10F
→
10/29 12:11, , 11F
10/29 12:11, 11F
→
10/29 12:13, , 12F
10/29 12:13, 12F
推
10/29 14:09, , 13F
10/29 14:09, 13F
→
10/29 14:09, , 14F
10/29 14:09, 14F
→
10/29 14:41, , 15F
10/29 14:41, 15F
→
10/29 14:42, , 16F
10/29 14:42, 16F
→
10/29 14:43, , 17F
10/29 14:43, 17F
→
10/29 14:43, , 18F
10/29 14:43, 18F
推
10/29 19:28, , 19F
10/29 19:28, 19F
討論串 (同標題文章)
完整討論串 (本文為第 1 之 2 篇):
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章