C中结构的指针和结构

时间:2014-03-05 12:05:29

标签: c pointers structure

我对我的结构有这个定义:

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;

}

3 个答案:

答案 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);
...