繁体   English   中英

是否可以将指针传递给C中的结构?

[英]Is it possible to pass pointers to a struct in C?

我从main调用函数init_latent_variables并将指针传递给SAMPLE类型的结构sample

int main(){
    SAMPLE sample;
    sample = read_struct_examples();
    init_latent_variables(&sample);
    return 0;
}

SAMPLE read_struct_examples() {
    SAMPLE sample;        
    sample.examples = (EXAMPLE *) malloc(1*sizeof(EXAMPLE));
    if(!sample.examples) die("Memory error.");
    return(sample); 
}

以下是功能定义。 内存分配在此函数中工作正常,但main的原始变量保持不变。

void init_latent_variables(SAMPLE *sample) {
    sample->examples[0].h.h_is = (int *) malloc(5*sizeof(int));
    if(!sample->examples[0].h.h_is) die("Memory error.");       
}

以下是结构定义:

typedef struct latent_var {
  int *h_is;
} LATENT_VAR;

typedef struct example {
  LATENT_VAR h;
} EXAMPLE;

typedef struct sample {
  EXAMPLE *examples;
} SAMPLE;

我传递结构体的指针正确吗? 有可能在C语言中这样做吗?

更新 :不确定之前出了什么问题。 清理并重新编译似乎可行。 多谢您的宝贵时间致歉。 已经标记了该问题,以便主持人可以将其删除。

在分配sample->examples之前,您要取消引用sample->examples

void init_latent_variables(SAMPLE *sample) {
    sample->examples[0].h.h_is = (int *) malloc(5*sizeof(int));
    if(!sample->examples[0].h.h_is) die("Memory error.");       
}

这应该是:

void init_latent_variables(SAMPLE *sample, int num_examples) {
    sample->examples = (EXAMPLE *) malloc(sizeof EXAMPLE * num_examples);
    if(!sample->examples) die("Memory error.");   
    sample->examples[0].h.h_is = (int *) malloc(5*sizeof(int));
    if(!sample->examples[0].h.h_is) die("Memory error.");       
}

考虑使用calloc()代替malloc,或使用memset在使用结构之前将其清除为0。

首先,您必须分配示例SAMPLE结构的成员……据我所知,它必须是一个对象数组……而且,当然,在C中没有引用,只有“值”或“指针”。

暂无
暂无

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

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