2012-03-16 61 views
4

我有一個結構,其中包含一些字符串。爲什麼在一個struct中放入一個字符串會導致崩潰?

struct item { 
    string item_name; 
    int item_property_1; 
    double item_property_2; 
} 

後來我對它們進行初始化:

item item1; 
item1.item_name = "Name of Item"; 
item1.item_property_1 = 5; 
item1.item_property_2 = 10.0; 

如果我註釋掉行分配的字符串,它運行良好。隨着字符串分配,它崩潰。我不知道爲什麼。

我現在已經註釋掉了其他函數的內容,這些函數試圖找出可能導致建議損壞的原因,並且它仍然崩潰。我只用一個字符串和數字來表示一個結構,如果我爲任何字符串賦值,它就會崩潰。

什麼會導致腐敗?

編輯通過請求添加導致崩潰的最小數量的實際代碼。註釋掉的部分被省略。

struct player_c { 
     string advClass; 
     int role; 
}; 

player_c shadow; 

Shadow::Shadow(QWidget *parent) : 
    QMainWindow(parent), 
    ui(new Ui::Shadow) 
{ 
    ui->setupUi(this); 
    shadow.advClass = " "; 
    shadow.role = 1; 
} 

剩下的就是這些。我只包含int來測試和驗證,賦值它工作正常,只要字符串被註釋掉就行。結構中任何字符串的使用都會導致崩潰。

我不需要他們那裏。我目前沒有使用這些字符串,我把它們放在結構體中,因爲我打算稍後使用它們,但是如果沒有它們,我可以完成相同的目的。現在我只想了解爲什麼。

+0

你沒有編譯時錯誤,程序在運行時崩潰? – 2012-03-16 10:03:52

+1

該問題必須在別處。 – juanchopanza 2012-03-16 10:05:08

+2

可能是崩潰是**不是由該行引起的,代碼中的其他內容會在_item1_內存位置上寫入垃圾。 – 2012-03-16 10:05:48

回答

2

該代碼是完全合法的。該錯誤在您的其他代碼中。

2

的代碼運行正常:http://ideone.com/1NoMG

一定有什麼東西在代碼中錯誤的其他地方,或者你的編譯器。

此外,當您創建item1時,item1.item_name被初始化。 item1.item_name = "Name of Item";是一項任務。

2

你的代碼看起來不錯,但是你的代碼中的其他地方可能會有內存損壞。

+0

什麼可能導致內存損壞?除了結構聲明和設置字符串值的一行之外,我現在已經注意到了所有其他的內容,每次都會崩潰。如果我指定了其中一個數字,它可以正常工作。唯一的問題是字符串。 – RuQu 2012-03-16 10:19:14

+0

如果你只留下item item1,它會不會崩潰?這將創建字符串成員並將其初始化爲空字符串。這將分配內存,所以我期望事件會崩潰。嘗試給它分配一些其他(較短的)文字或者移動這些代碼('main()'的最開始處)。嘗試改變結構成員的順序 - 在字符串前加整數和雙精度,看看會發生什麼。 – 2012-03-16 10:31:08

+0

我把字符串放在結構的開頭,然後在結尾再次嘗試。兩人都墜毀。我嘗試將這個任務移到另一個函數中,但是一旦這個被稱爲程序崩潰。 – RuQu 2012-03-16 10:39:29

2

以下內容按照G ++版本4.6.1編譯和運行,沒有任何崩潰。你必須有其他的東西不正確。

[21:18:32] [email protected]:[~]$ cat t.cpp 

#include <iostream> 
#include <string> 

using namespace std; 

struct item { 
     string name; 
     int number; 
}; 

int main() 
{ 
     item i; 
     i.name = "blah"; 
     i.number = 12; 

     cout << "name=" << i.name << " number=" << i.number; 
} 


[21:18:34] [email protected]:[~]$ ./a.out 
name=blah number=12 

[21:18:36] [email protected]:[~]$ 
1

你有沒有機會得到一個類型爲Shadow的全局變量?當另一個全局構建時,可能影子全局變量未被初始化。

相關問題