2013-10-14 42 views
0

當我執行下面的函數時,出現這個錯誤,我不知道它是什麼意思。下面是函數:glibc檢測到空閒()無效大小(快)錯誤?

void readf2() 
{ 
    std::ifstream inFile("f2",std::ios_base::binary); 
    std::string str(2, '\0'); 
    int i = 0; 
    while(inFile.read(&str[i],2)){ 
    cout<<"Success: ["<< i << "] = "<< (int)str[i];      ; 
    cout<<"\n"; 
    i++; 
    } 
} 

的功能工作了一段時間寫的各種數字控制檯,然後轟它與此錯誤,回溯和存儲器映射崩潰。這是因爲我釋放了一個不存在的內存地址嗎?

+0

究竟是什麼你想在這裏做什麼? – littleadv

+0

@littleadv我正在閱讀包含一堆二進制數字的文件,我想輸出它們以便我可以看到它是否正常工作。我必須做的是將這些數字保存到一個整數數組中,然後將其輸出到一個單獨的文件中。 – Andy

+0

你在期待'str'是那個數組嗎? – littleadv

回答

1

您很可能會給read調用一個指向不屬於您的內存的指針。

str[i]返回字符串中的偏移量,但它不能保證您有足夠的內存來讀取那個位置(+2)。

你大概的意思是有int秒的陣列,並使用i作爲一個索引:

void readf2() 
{ 
    std::ifstream inFile("f2",std::ios_base::binary); 
    std::vector<int> str; // if you're reading int's - use int, not string 
    int i = 0; 
    int j; 
    while(inFile.read(&j,sizeof(int))){ // check what the content is here 
    str.push_back(j); 
    cout<<"Success: ["<< i << "] = "<< str[i]; 
    cout<<"\n"; 
    i++; 
    } 
} 
+0

那麼我怎麼去預防呢? – Andy

+0

現在我遇到了seg故障。我認爲這可能是while循環。 I'llll和調整它 – Andy

+0

我猜''(int)str [我]'不是你應該在那裏做什麼。爲什麼你要將二進制讀入字符串中?這一切似乎都是錯的...... – littleadv

相關問題