我有這個功能從文件中讀取文本: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) –