我正在尝试读取一个非常大的 .txt 文件,该文件有 128x128x128=2097152 行(线性化 3d 空间),其中仅包含一个 0 或 1 行(不要问为什么)...我将代码缩减为几行似乎当我计算行和增量时,一切都很顺利...但是一旦我想将数据放入足够允许的数组中,行读取就会停止在 i=12286...
这是代码
int dim = nbvox[0]*nbvox[1]*nbvox[2];
float* hu_geometry = new float(dim);
int* hu_temp = new int(dim);
string line;
int i = 0;
ifstream in(hu_geom_file.c_str());
if(in.is_open())
{
while(getline(in, line))
{
hu_temp[i] = stoi(line);
cout << "i= " << i << " line= " << line << " hu_temp= " << hu_temp[i] << endl;
i++;
}
cout << __LINE__ << " i=" << i << endl;
in.close();
cout << __LINE__ << endl;
}
else cout << "Unable to open " << hu_geom_file << endl;
这是我在收到错误之前得到的最后一个输出...这很奇怪,因为每当我在 while 内注释 hu_temp 行时,cout 就单独工作到 2097152。
i= 12276 line= 0 hu_temp= 0
i= 12277 line= 0 hu_temp= 0
i= 12278 line= 0 hu_temp= 0
i= 12279 line= 0 hu_temp= 0
i= 12280 line= 0 hu_temp= 0
i= 12281 line= 0 hu_temp= 0
i= 12282 line= 0 hu_temp= 0
i= 12283 line= 0 hu_temp= 0
i= 12284 line= 0 hu_temp= 0
i= 12285 line= 0 hu_temp= 0
115 i=12286
*** Error in `G4Sandbox': free(): invalid pointer: 0x0000000001ba4c40 ***
Aborted (core dumped)
float* hu_geometry = new float(dim);
int* hu_temp = new int(dim);
这些是包含值的 1 个字符数组dim
。在某些时候,您会遇到 MMU 边界并随机崩溃。
你想写:
float* hu_geometry = new float[dim];
int* hu_temp = new int[dim];
或者使用向量可能更好,预先分配dim
元素
#include <vector>
std::vector<float> hu_geometry(dim);
std::vector<int> hu_temp(dim);
或在开始时未分配:
std::vector<int> hu_temp;
并在您的代码中:
hu_temp.push_back(stoi(line));
(hu_temp.size()
给出了尺寸和许多非常好的功能的更好描述here http://www.cplusplus.com/reference/vector/vector/)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)