C ++,Array - Windows错误崩溃,但没有编译器错误

时间:2014-12-09 03:01:39

标签: c++ arrays

好的,这就是我的代码。我在编译器中没有错误,但是当我运行这个程序时,它允许我输入2个名称,然后使用Window的错误崩溃。我做错了什么?!

#include <iostream>

using namespace std;

//declaration of variables

int i; // Loop Counter
int x; // Number of Family Members

int main()
{

string FamilyName[x]; // Array of Names


cout << "Enter Number of Family Members" <<endl;
cin >> x;

for (i = 0 ; i < x ; i++){
        cout << "Enter Family Member's Name: " <<endl;
        cin >> FamilyName[i];
}
for (i = 0 ; i < x ; i++){
    cout << FamilyName[i] <<endl;
}

return 0;
}

4 个答案:

答案 0 :(得分:1)

您可以通过两种方式解决问题,将数组分配给大型(x应该初始化...并且应该是常量值),然后代码变为:

#include <iostream>
#include <string>
using namespace std;

//declaration of variables

int i; // Loop Counter
const int x = 500; // MAX Number of Family Members

int main()
{

string FamilyName[x]; // Array of Names

int count;
cout << "Enter Number of Family Members" <<endl;
cin >> count;

for (i = 0 ; i < count ; i++){
        cout << "Enter Family Member's Name: " <<endl;
        cin >> FamilyName[i];
}
for (i = 0 ; i < count ; i++){
    cout << FamilyName[i] <<endl;
}

return 0;
}

或者使用动态内存分配首先读取家庭成员的数量,然后进行分配:

int main()
{

int count;
cout << "Enter Number of Family Members" <<endl;
cin >> count;

auto FamilyName = new string[count];

for (i = 0 ; i < count ; i++){
        cout << "Enter Family Member's Name: " <<endl;
        cin >> FamilyName[i];
}
for (i = 0 ; i < count ; i++){
    cout << FamilyName[i] <<endl;

    delete[] FamilyName;
}

希望这有帮助

答案 1 :(得分:0)

您没有为字符串数组分配任何内存,在此行string FamilyName[x]; // Array of Names x未定义。设置最大数组大小或者有一些方法可以推送到数组的末尾也是一个好主意。

答案 2 :(得分:0)

数组的大小应该是常量。

也许使用字符串向量,因为向量可以动态增长。

string name;
vector<string> FamilyName;
for(int i = 0; i < x; i++)
{
    cin >> name;
    FamilyName.push_back(name);
}

或者给你的阵列一个比你可能遇到的任何家庭大小更大的常数。

string FamilyName[100];

如果你不能成为拥有超过100名成员的家庭。

答案 3 :(得分:0)

您需要为FamilyName分配合理的内存或使用STL:

string[] FamilyName;
//after get x
FamilyName = new string[x];

vector<string> FamilyName;
cin << temp_string;
FamilyName.push_back(temp_string);
相关问题