繁体   English   中英

C语言的指针和结构

[英]Pointer and structure of structure in C

我对我的结构有以下定义:

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;

}

您可能用完了堆栈空间。

让我们注意, sizeof(ceva) > 20000000 ,所以您可能用完了堆栈空间。 相反,您可以在堆上分配数据:

int main(){
    ceva *data = malloc(sizeof(ceva));
    test1(data);
    free(data);
    return 0;
}

您的ceva结构占用了20MB以上的空间。 这可能比堆栈上的可用空间大得多,这通常会导致运行时崩溃(堆栈溢出)

而是动态分配它:

int main(){
    ceva *pointer = malloc(sizeof *pointer);
...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM