0xC0000005:访问冲突写入位置

时间:2012-12-17 22:04:26

标签: c++

我有这个函数用于从文件中读取文本:

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 sizeuintmax_t begin会获得其他代码,这里不重要,但值正确。

fseekfread行正常工作。 实际上,我有*数据中的文件内容,但是当执行最后一行时,我得到了访问冲突。

为什么我可以使用*data而不是fread写入using *data[size] = '\0'

2 个答案:

答案 0 :(得分:5)

您遇到运营商优先级问题 - 您需要(*data)[size],而不是*data[size]

答案 1 :(得分:3)

您的问题是运营商*[]的优先级。 *data[size]表示访问数据中的第n个char*,然后取消引用其第一个字符,而不是获取data指向的数组的第n个字符。

您希望(*data)[size]代替以正确的顺序执行操作。

编辑:由于这是C ++,你最好使用char*&来消除这些问题,或者很多更好地使用vector并让标准库为你管理你的记忆!