我对我的结构有这个定义:
typedef struct{
char name[100];//the probleme is here
char type[100];//and here
int quantity;
} product;
typedef struct{
int dim;
product produs[100];
} ceva1;
typedef struct{
int dim;
ceva1 produs[1000];
} ceva;
主要我有这段代码:
int main(){
ceva *pointer,obiect;
pointer=&obiect;
test1(pointer)
obiect.dim=0;
return 0;
}
当我尝试运行此程序时,出现“c.exe已停止工作”的错误。 我已经看到了,如果我删除objiet,错误将消失,但我有一个函数,当我调用该函数时,错误再次出现。怎么了?
void test1(ceva *pointer){
pointer->produs[0].produs[0].quantity=1;
}
答案 0 :(得分:0)
你可能已经没有堆栈空间了。
答案 1 :(得分:0)
让我们注意sizeof(ceva) > 20000000
,因此您可能会耗尽堆栈空间。相反,您可以在堆上分配数据:
int main(){
ceva *data = malloc(sizeof(ceva));
test1(data);
free(data);
return 0;
}
答案 2 :(得分:0)
您的ceva
结构占用超过20MB的空间。这可能比堆栈上的可用空间要多得多,这通常会导致运行时崩溃(堆栈溢出)
动态分配它:
int main(){
ceva *pointer = malloc(sizeof *pointer);
...