我有这个函数用于从文件中读取文本:
uintmax_t ResourcePack::getText(const string& file, char** data)
{
*data = new char[static_cast<size_t>(size) + 1];
fseek(_fileDescriptor, static_cast<long>(begin), SEEK_SET);
fread(*data, static_cast<size_t>(size), 1, _fileDescriptor);
*data[size] = '\0';
}
FILE* _fileDescriptor, uintmax_t size
和uintmax_t begin
会获得其他代码,这里不重要,但值正确。
fseek
和fread
行正常工作。
实际上,我有*数据中的文件内容,但是当执行最后一行时,我得到了访问冲突。
为什么我可以使用*data
而不是fread
写入using *data[size] = '\0'
?
答案 0 :(得分:5)
您遇到运营商优先级问题 - 您需要(*data)[size]
,而不是*data[size]
。
答案 1 :(得分:3)
您的问题是运营商*
和[]
的优先级。 *data[size]
表示访问数据中的第n个char*
,然后取消引用其第一个字符,而不是获取data
指向的数组的第n个字符。
您希望(*data)[size]
代替以正确的顺序执行操作。
编辑:由于这是C ++,你最好使用char*&
来消除这些问题,或者很多更好地使用vector
并让标准库为你管理你的记忆!