我有一个结构,其中包含几个字符串。
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 :(得分:2)
该代码完全合法。错误出现在代码的其余部分中。
答案 1 :(得分:2)
代码运行良好:http://ideone.com/1NoMG
代码或编译器中的其他地方一定有问题。
此外,创建item1.item_name
时会初始化item1
。 item1.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全局变量。