2012-03-16 60 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的全局变量?当另一个全局构建时,可能影子全局变量未被初始化。

相关问题