字符串数组的动态分配C

dynamic allocation of string arrays c++

本文关键字:动态分配 数组 字符串      更新时间:2023-10-16

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

" 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++;
    }

您无法通过失去对数组的控件来增加数组启动地址(ARR )。数组索引仅在数组引用指向数组的第一个元素时才有效。因此,请删除ARR 代码行,正如David所说,您必须将Numread初始化为零,否则有些分配的较大随机数也将导致此错误

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

我也没有看到您在循环开始之前将numRead初始化为0的证据。

使用矢量卢克!就像: std :: vector arr;然后在循环中将名称添加到矢量中: arr.push_back(name);

您正在编写的代码是C 并且请停止投票问题