今天執行的程式崩潰了,發現原因為程式中用到了stl的std::string賦值為空指標,形式如下:
void fun(const char *ptest)
就其語法來說,是沒有錯誤的,但程式執行卻崩潰了。
原因為:std:string 不能接受賦值為空指標。
原因為:std::string 在賦值為空指標的時候,會把指標指向的內容拷貝到std::string 裡的char空間裡;而空指標指向的空間,是不可訪問的,該程式自然會崩潰。
所以,形如下面的程式,都會崩潰。
char *p = null;
std::string str = p;
char *q = nullptr; // c++ 11
std::string strnull = q;
而一般來說,std::string賦值為空串的形式為:
std::string str = "";
判斷乙個字串為空串的方法為:
1)字串與空串比較,即兩者相等判斷。
2)字串函式empty() 函式。
一般來說,empty()函式是更好一點的判斷;因為,stl裡面,一般都預存了容器本身的長度。
指標,野指標,空指標,賦值?
bug中最可怕的是野指標,那麼問題來了,野指標是什麼?是如何產生的?為什麼程式設計師會 忘記 昨天除錯時,我發現了乙個野指標,由此我明白了。a的值成了亂碼,而且gcc編譯器並沒有報錯,那麼請看下面的 那麼我們假設a是指標,一旦我們如同該 一般不讓a指向元素的話,編譯器 必然是會報錯的,那麼我們不如假...
this指標能否為空指標?
首先我們知道,this指標指向的是當前物件。空指標p同時訪問了 test 函式和 change 函式,在 test 函式呼叫過程中沒有報錯,但是在 change 函式中報錯了。void test person const this void change person const this 根據 t...
c 判斷指標為空 關於C中指標為空的判斷
在看c中指標是否為空的判斷說明時,出現了分歧。if ptr 如果 p 非空,則完成 if ptr 如果 p 為空,則完成 而我在林銳博士 c程式設計規範 一文中看到,為了和bool型別的判斷區分,他建議 判斷指標使用 if null ptr or if null ptr 這種方式。但是,按照 c 之...