为什么在结构中放一个字符串会导致崩溃?

时间:2012-03-16 10:01:52

标签: c++ string 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来测试并验证为它赋值是否正常工作,并且只要字符串被注释掉就可以了。在结构中使用字符串会导致崩溃。

我不需要他们。我目前没有使用这些字符串,我将它们放在结构中,因为我打算稍后使用它们,但我可以在没有它们的情况下实现相同的目的。现在我只想了解原因。

5 个答案:

答案 0 :(得分:2)

该代码完全合法。错误出现在代码的其余部分中。

答案 1 :(得分:2)

代码运行良好:http://ideone.com/1NoMG

代码或编译器中的其他地方一定有问题。

此外,创建item1.item_name时会初始化item1item1.item_name = "Name of Item";是一项任务。

答案 2 :(得分:2)

您的代码看起来不错,但您的代码中的其他地方可能存在内存损坏。

答案 3 :(得分:2)

以下编译和运行与G ++版本4.6.1一样没有任何崩溃。你必须有别的错误。

[21:18:32] user@host:[~]$ 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] user@host:[~]$ ./a.out 
name=blah number=12

[21:18:36] user@host:[~]$ 

答案 4 :(得分:1)

你是否有机会获得Shadow类型的全局变量?当构造另一个全局变量时,可能不会初始化shadow全局变量。