我无法弄清楚以下代码的问题是什么,只是崩溃而没有向屏幕输出任何内容:
#include <cstdlib>
#include <iostream>
using namespace std;
typedef struct {
unsigned int recid;
unsigned int num;
char str[120];
bool valid;
} record_t;
typedef struct {
unsigned int blockid;
unsigned int nreserved;
record_t entries[100];
bool valid;
unsigned char misc;
} block_t;
int main(){
cout << "Before Buffer" << endl;
block_t buffer[1000];
cout << "After Buffer" << endl;
return 0;
}
我尝试过Qt调试器和GBD,他们只是显示分段错误并指向主函数的开头。
每个block_t元素的大小为13,2 Kbs,因此缓冲区数组的大小应为13Mb左右。也许这对C阵列来说太过分了?
答案 0 :(得分:3)
block_t buffer[1000];
可能使用了所有堆栈空间(需要大于1000 * 100 * 120 * 1字节,假设ASCII大约等于12MB,不考虑这些结构的其他字段),因此,您会遇到分段错误。
尝试使用:
block_t * buffer = new block_t[1000];
或std::vector
代替或尽可能将堆叠空间增加到更大的尺寸。
答案 1 :(得分:2)
您的buffer
变量约为13MB - 对于堆栈分配来说太大了。