【发布时间】:2021-02-03 10:11:57
【问题描述】:
对于一个问题,我必须使用动态分配和函数(仅使用指针变量)从 .txt 文件中读取名称并按词法顺序对名称进行排序。但是,我什至无法让读取功能正常工作。它是这样写的:
void readNames(std::string* a[])
{
std::ifstream fin;
fin.open("names.txt");
for (int i = 0; i < 7; ++i)
{
fin >> *(a[i]);
std::cout << *a[i];
}
}
我在 main 中是这样称呼它的:
std::string* names;
names = new std::string[7];
readNames(&names);
但是,当我运行它时,我得到了错误:
抛出异常:读取访问冲突。 这是 0xCCCCCCCC。
并显示此功能(不确定是否有帮助):
void _Check_offset(const size_type _Off) const { // checks whether _Off is in the bounds of [0, size()]
if (_Mysize < _Off) {
_Xran();
}
}
如果有人能帮我解决这个问题,我将不胜感激,谢谢!
【问题讨论】:
-
(*a)[i]在readNames的所有上下文中都会做你想做的事,但是通过地址传递名称仍然有很糟糕的代码气味。我认为没有理由首先通过地址传递该指针,除非 API 本身是固定的(而且它肯定看起来不像),坦率地说,我会更改调用者和函数,或者更好的是,使用字符串向量。 -
我这样做的唯一原因是因为我认为这就是问题所要求的。我在原始问题中包含了硬件问题。
-
void readNames(std::string* a[])最好写成void readNames(std::array<std::string,7> & arr)或者std::array<std::string,7> readNames() -
我觉得老师希望你用
void readNames(std::string* arr, int numElements)而不是void readNames(std::string* a[])
标签: c++ arrays function pointers dynamic-memory-allocation