C ++程序与结构数组声明崩溃

时间:2013-04-29 01:55:27

标签: c++ segmentation-fault

我无法弄清楚以下代码的问题是什么,只是崩溃而没有向屏幕输出任何内容:

#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阵列来说太过分了?

2 个答案:

答案 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 - 对于堆栈分配来说太大了。