我有这个功能从文件中读取文本:0000005:访问冲突写入位置
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'
写入*data
?
运算符优先级 - 您想要'(* data)[size]',而不是'* data [size]'。 –
正如@PaulR所说......通常我更喜欢存储一个临时的'char *'变量,并在函数中处理它,然后在返回之前通过'char **'存储它。这样我就避免了可能导致错误和/或眼睛酸痛的额外语法错误。 =) – paddy
0xCC表示您已阅读[未初始化的内存](https://stackoverflow.com/q/370195/995714) –