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