C++将文本文件读入数组,运行错误:分段错误

C++ read text file into array, run error: segmentation fault

本文关键字:错误 运行 分段 数组 文本 文件 C++      更新时间:2023-10-16

我正在尝试将文本文件读取到3D数组中。编译进行得很顺利,但我遇到了运行错误:"分段错误"。有人有什么建议吗?非常感谢。

#include <fstream>
using namespace std;
  const int x =  288;
  const int y =  288;
  const int z = 30;
  float realimg[x][y][z];
  Array<std::complex<float>,3> realimage(x,y,z);
  Array<std::complex<float>,3> imagimage(x,y,z); 
    ifstream fin1("realfile.txt");
  for ( int kk = 0; kk < z; ++kk )
  {
    for ( int jj = 0; jj < y; ++jj )
    { 
      for ( int ii = 0; ii < x; ++ii )
      {
        fin1 >>realimg[ii][jj][kk];
        realimage(ii,jj,kk)=realimg[ii][jj][kk];
      }
    }
  }
  const int x =  288;
  const int y =  288;
  const int z = 30;
  float realimg[x][y][z];

这将在堆栈上分配realimg数组。此数组的大小为288*288*30*sizeof(float) == 9953280 bytes == 9.5MiB。在典型的Linux系统上,默认堆栈大小为8MiB

如果在执行ulimit -s unlimited之后崩溃消失,那么堆栈耗尽确实是您的问题。一种可能的解决方案是在堆上分配readlimg(使用malloc)。