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

标签 c++ arrays

好的,这是我的代码。我在编译器中没有收到任何错误,但是当我运行这个程序时,它让我输入 2 个名称,然后因窗口错误而崩溃。我到底做错了什么?!

#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;
}

最佳答案

可以通过两种方式解决问题,将数组分配到一个较大的大小(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;
}

希望对你有帮助

关于C++,数组 - Windows 错误崩溃但没有编译器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27370783/

相关文章:

c++ - "dereferencing"指针是什么意思?

c++ - 为什么我不能在 Windows 上使用 boost::locale::conv::between 将 UTF-16 文本转换为其他编码

c++ - 迭代器上的 vector 下标超出范围

c++ - Windows Mobile 上的自有窗口

c++ - 静态断言可变参数模板的嵌套值是唯一的

javascript - 如何在帖子列表中首先添加新帖子?

c - C 中动态数组的删除操作

arrays - 在 TableView 中过滤二维数组以在 Swift 中进行搜索

javascript - 在 JavaScript 中按周和月对日期 "yyyy-mm-dd"的简单数组进行分组

c++使用动态分配运算符反转数组元素