gpt4 book ai didi

c - 将结构传递给函数会产生默认错误

转载 作者:太空宇宙 更新时间:2023-11-04 05:31:03 24 4
gpt4 key购买 nike

这两个函数(至少在我的编译器下)保证会产生段错误,但我不知道为什么。我真的很喜欢它们的功能并且我见过类似的例子,所以我很想知道这里出了什么问题或者如何做我认为这实际上做的事情,即将“级别”传递给某个函数然后能够操纵它的变量(例如 lvl.lvl_cl[x][y][z] = some_number),然后将其传回以供进一步使用

感谢任何帮助:)

typedef struct {
int lvl_cl[500][500][50];
char lvl_ch[500][500][50];
} level;

level plugh(level * in_lvl){
in_lvl->lvl_cl[444][444][44]++; //it segfaults even if this line is removed
return * in_lvl;
}

level foo(level inlvl){
inlvl.lvl_cl[443][443][43]++; //it segfaults even if this line is removed
return inlvl;
}

int main(void){
level world;
plugh(&world);
foo(world);
return 0;
}

最佳答案

堆栈溢出?

说真的,你有没有想过你的结构有多大?如果将它存储在堆栈中,它将溢出...

试试 sizeof(level),看看实际大小会很有趣。

编辑:如果您需要这么大的东西,您真的应该考虑存储它的位置和方式。如果将它传递给一个函数,您将制作一个结构的副本 并将其放在堆栈上。如果您返回该结构,您很可能需要堆栈的另一个副本。

你真的需要传递和返回结构吗?如果没有,您可以将它放在普通的静态内存中(一个普通的全局变量)或在堆上分配一个。无论哪种方式,如果您传递指向它的指针,它只会消耗整个结构的一小部分。

关于c - 将结构传递给函数会产生默认错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5708067/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com