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

C++ 动态分配字符串数组c++;,c++,arrays,string,C++,Arrays,String,我正试图从给我的文件中读入名字。读取的名称数基于用户输入。这可以很好地编译,但当我运行它时,会出现以下错误: “0xC0000005:访问冲突写入位置0xabababab。” 我做了一些研究,我想这可能是因为我写的是数组的边界,但我不明白为什么会这样 在有人问我之前,我被告知必须对数组使用string*。我不能使用向量或字符数组。多谢各位 int Capacity; int numNames = 0; // wasn't in original question, but was

我正试图从给我的文件中读入名字。读取的名称数基于用户输入。这可以很好地编译,但当我运行它时,会出现以下错误:

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

我做了一些研究,我想这可能是因为我写的是数组的边界,但我不明白为什么会这样

在有人问我之前,我被告知必须对数组使用string*。我不能使用向量或字符数组。多谢各位

    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++;
    }
int容量;
int numNames=0;//不在原始问题中,但在代码中
cin>>容量;
字符串名;
字符串*arr=新字符串[容量];
而(!fs.eof()&&numRead
您不能增加
arr
。删除那行代码。您正在使用数组索引,
arr[numRead]
,来访问数组的元素


我也看不到任何证据表明您在循环开始之前将
numRead
初始化为
0

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

使用向量!就像: std::载体arr; 然后在循环中向向量添加名称,如下所示: arr.push_back(名称)

<>你编写的代码是C而不是C++
请停止投票问题

您正在做的
arr++
也可以将您的循环更改为:
std::getline(fs,arr[numRead++])
并去掉
名称
和其他一切。。完成后别忘了调用
delete[]arr
。也要摆脱
!fs.eof()
,这是错误的检查。相反,当
getline
失败时终止循环。