分段故障问题(C)

use*_*938 6 c segmentation-fault

我有一个名为Game的结构,其中包含一系列级别,定义如下:

typedef struct 
{
     Level levels[x];
} Game;
Run Code Online (Sandbox Code Playgroud)

当我编译代码时,如果x是1,2或3,程序运行正常.如果它是任何其他值(例如4),我会得到分段错误.我不是在任何地方访问阵列.Main就是这样的东西(除了初始化之外的一切评论):

int main (...)
{
     Game g;

     return 0;
}
Run Code Online (Sandbox Code Playgroud)

这可能是什么的任何线索?

提前致谢.

non*_*237 5

如果Level类/ struct非常大,你可以试试这个:

typedef struct {
    Level *levels;
} Game;
Run Code Online (Sandbox Code Playgroud)

然后使用malloc()或new分配您的级别.或者如果你真的需要一系列关卡:

typedef struct {
    Level* levels[NUM_LEVELS];
} Game;
Run Code Online (Sandbox Code Playgroud)

然后使用以下内容分配级别:

// Allocate levels
int i;
for(i=0;i<NUM_LEVELS;i++) {
    gameStruct.levels[i] = (Level*)malloc(sizeof(Level));
    initLevelNum(gameStruct.levels[i], i);
}
Run Code Online (Sandbox Code Playgroud)


Jer*_*fin 4

一个有多大Level?你的堆栈有可能溢出吗?鉴于(显然)无论如何都只有一个 Game 对象,也许您最好使用static存储类,如下所示:static Game g;

编辑:如果您想在堆上强制分配,我建议使用std::vector<Level> levels;而不是直接使用指针。哎呀——错过了它被标记为 C,而不是 C++。

  • 我同意他可能溢出堆栈,但问题不是 c++ :) (2认同)