读取二进制文件时出现分段错误
Segmentation fault when reading binary file
我正在尝试从现有的二进制文件中读取数据,但我得到的只是一个分段错误。我认为它可能来自结构,所以我使用了一个临时数组,我尝试在其中填写值,但问题似乎来自 ifstream 读取函数。谁能帮我解决这个问题?
bool RestoreRaspberry::RestorePhysicalAdress(TAddressHolder &address) {
mPRINT("now i am in restore physical addressn");
/*
if (!OpenFileForRead(infile, FILENAME_PHYSICALADDRESS)){
printf("nRestoreUnit: Error open file Restore Physical Addressn");
return false;
}
*/
ifstream ifile;
ifile.open(FILENAME_PHYSICALADDRESS, ios_base::binary | ios_base::in);
if (!ifile.is_open())
{
printf("nRestoreUnit: Error open file Restore Physical Addressn");
return false;
}
printf("nRestoreUnit: now trying to read it into adress structuren");
uint8 arr[3];
//the problem occurs right here
for (int i = 0; i < cMAX_ADRESS_SIZE || !ifile.eof(); i++) {
ifile.read(reinterpret_cast<char *>(arr[i]), sizeof(uint8));
}
#ifdef DEBUG
printf("physical address from restoring unit: ");
/*
printf("%#x ", address.Address[0]);
printf("%#x ", address.Address[1]);
printf("%#x n", address.Address[2]);
*/
printf("%#x", arr[0]);
printf("%#x ", arr[1]);
printf("%#x n", arr[2]);
#endif
ifile.close();
if (!ifile){//!CloseFileStream(infile)){
printf("nRestoreUnit: Error close file Restore Physical Addressn");
return false;
}
}
很难说,因为你没有提供一个可编译的例子,但从外观上看,问题就在这里:
ifile.read(reinterpret_cast<char *>(arr[i]), sizeof(uint8));
您正在将uint8
重新解释为char *
.这意味着arr[i]
中保存的任何内容(由于您未初始化它而未定义)都被解释为将读取值的地址。我相信这就是您的意图:
ifile.read(reinterpret_cast<char *>(&arr[i]), sizeof(uint8));
或者,可以说更清楚:
ifile.read(reinterpret_cast<char *>(arr + i), sizeof(uint8));
您还应该将循环条件更改为使用 &&
;现在,如果文件中有超过 3 个字节,您将溢出数组arr
并且可能在那里出现段错误:
for (int i = 0; i < cMAX_ADRESS_SIZE && !ifile.eof(); i++) {
相关文章:
- 在某些循环内使用vector.push_back时出现分段错误
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- 如何解决gcc编译器优化导致的centos双编译器设置中的分段错误
- 当我的阵列太大时出现分段错误
- 分段错误当我试图运行程序时出错
- 在c++中初始化矩阵时出现分段错误(核心转储)
- 尝试使用集合函数时出现分段错误
- 我无法缩小此分段错误的原因
- g++的分段错误(在NaN上使用to_string两次时)
- 我是如何在这段代码中出现分段错误的
- 创建结构的数组时遇到分段错误
- 在c++中键入向量中的所有值后,得到分段错误(核心转储)
- 在 c++ 中实现 Trie 时出现分段错误
- 为什么 fstream 在打开带有格式的文件时会导致分段错误?
- 为什么我遇到分段错误?
- 动态类的分段错误(家庭作业问题)
- 分段错误 - 读取初始化指针的数组
- 如何摆脱C ++中的分段错误错误?
- 使用 CTYPE 时出现分段错误
- 为什么代码给出分段错误?