我不太确定为什么会这样。我有一个程序:
std::ifstream file(path, std::ios::binary);
file.seekg(0, file.end);
int length = file.tellg();
file.seekg(0, file.beg);
char* buffer = new char[length];
file.read(buffer, length);
file.close();
运行良好,并正确读取数据。但是,如果我将buffer
的声明替换为:
char buffer[length];
然后我得到了一个分段错误。数据大小约为几兆字节。有什么区别?
答案 0 :(得分:1)
不同之处在于“几兆字节”太大而无法放入流程的“堆栈”,您现在正在放置数据。
(此外,您依赖于GCC扩展; length
,作为一个变量,其值在运行时之前是未知的,不能合法地用作“普通”数组的大小,如此)
将代码恢复原样,并在完成使用后忘记delete[]
buffer
。
实际上,这会更好:
std::vector<char> buffer(length);
file.read(&buffer[0], length);