动态分配字符串数组c ++

时间:2014-02-03 00:59:37

标签: c++ arrays string

我正在尝试从给我的文件中读取名称。读取的名称数量基于用户输入。编译很好,但是当我运行它时我得到这个错误:

“0xC0000005:访问冲突写入位置0xabababab。”

我做了一些研究,我认为这可能是因为我正在编写数组的边界,但我无法弄清楚为什么会出现这种情况。

在有人询问之前我被告知我必须使用字符串*作为我的数组。我不是使用向量或字符数组。谢谢。

    int Capacity;
    int numNames = 0; // wasn't in original question, but was in the code
    cin >> Capacity; 

    string name;
    string* arr = new string[Capacity];

    while( !fs.eof() && numRead < Capacity)
    {
         getline( fs , names);
         arr[numRead] = names;  // error thrown here
         arr++;
         numRead++;
    }

3 个答案:

答案 0 :(得分:1)

您不得增加arr。删除该行代码。您正在使用数组索引arr[numRead]来访问数组的元素。

我也发现没有证据表明您在循环开始之前已将numRead初始化为0

答案 1 :(得分:1)

你不能递增数组的起始地址(arr ++),这样你就失去了对数组的控制。仅当数组引用指向数组的第一个元素时,数组索引才有效。所以删除arr ++代码行,正如David所说,你必须将numRead初始化为零,否则一些分配较大的随机数也会导致这个错误

答案 2 :(得分:0)

使用矢量卢克!这将是:     std :: vector arr; 然后在循环中将名称添加到向量中,如下所示:     arr.push_back(名称);

您正在编写的代码是C而不是C ++ 请停止投票问题