最近初學C++,這個問題對我來說很迷,上代碼
#include <iostream>
#include <string>
using namespace std;
int main() {
int v = 1;
string d = "aa"; //這條陳述句與下面的itoa呼叫,同時出現,cout不能輸出字符,如果不同時出現cout則能輸出
char *b;
itoa(v,b,10);
cout<<"dsfg";
return 0;
}
迷惑的是string d= "aa"和 itoa(v,b,10);這兩個陳述句八竿子打不著,為什么會影響cout,這兩個陳述句同時出現,cout居然輸出為空,什么都沒有。有大神能分析下啥原因不。
uj5u.com熱心網友回復:
這個char* itoa(int num,char* str,int radix)沒找到原始碼,看百度百科里面它的原始碼中沒有自動為str分配記憶體,如果沒分配記憶體那么就會發生記憶體泄漏,我在除錯的時候也出現了Signal: SIGSEGV (Segmentation fault) 段錯誤,訪問了系統給程式分配的記憶體之外的記憶體。后面我給指標b提前分配一下記憶體,然后一切正常,沒有出現SIGSEGV 錯誤。總結:我以為itoa里面應該根據給的數字大小動態分配記憶體,但是根據現象看并沒有,不能直接傳個空指標給itoa。 那么如果讓我自己提前分配好,那么我怎么知道應該分配多少,多了豈不是浪費,感覺這點有點不合理。 但是我看有的人的博客里itoa原始碼有自動分配記憶體,不知道真正的原始碼里是什么樣的。
uj5u.com熱心網友回復:
b定義成字串陣列,比如b[10]uj5u.com熱心網友回復:
你沒給b分配記憶體,b是野指標,itoa后鬼知道你破壞了什么記憶體資訊,導致程式例外也不足為奇。uj5u.com熱心網友回復:
b只是指標,你要分配記憶體才行,要搞個存放數字的地方吧!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/8113.html
標籤:C++ 語言
