1

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

#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 数组来说太多了?

4

2 回答 2

3
block_t buffer[1000];

可能使用了所有堆栈空间(需要大于 1000* 100 *120 *1 字节假设 ASCII 大约等于 12MB,不考虑这些结构的其他字段),因此,您会遇到分段错误。

尝试使用:

block_t * buffer = new block_t[1000];

或者 std::vector如果可能的话,或者将您的堆栈空间增加到更大的大小。

于 2013-04-29T02:01:02.467 回答
2

您的buffer变量大约为 13MB - 对于堆栈分配来说太大了。

于 2013-04-29T02:01:21.513 回答