c - 如何初始化动态分配结构的成员

标签 c dynamic structure

我已经为两个结构分配了内存,并且试图为结构的成员提供一些值。但是,它不起作用,我不知道该怎么办。请帮助我了解发生了什么事。这是我的代码:

#include <stdio.h>
#include <std lib.h>
struct rec{
    int i;
    double f;
    char c;
};

int main(){

    struct rec *p;
    p = (struct rec *) malloc(2*sizeof(struct rec));

    p[0]->i = 10;
    p[0]->f = 3.1;
    p[0]->c = 'a';

    p[1]->i = 20;
    p[1]->f = 6.2;
    p[1]->c = 'b';

    free(p);

    getchar();
    return 0;
}

最佳答案

例如,p[0] 已经取消引用您的struct rec *p,这就是为什么当您尝试编译代码时,您将收到以下错误:

错误:“->”的类型参数无效(具有“struct rec”)

gcc 也会告诉你这个错误发生在哪里,例如:

p[0]->c = 'a';(源代码第 14 行)

发生这种情况是因为您尝试取消引用已经取消引用的p[0]

现在要解决此问题,只需将 -> 切换为 或者您也可以使用 (p + x)-> (x 是一个有效的数字,在您的情况下是从 0 到 1)来取消引用您的指针。

关于c - 如何初始化动态分配结构的成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54534200/

相关文章:

java - 构建我们的 Java 包

c - C中没有宽度打印格式

c - 编译时对所有 'sem' 和 'pthread' 函数的 undefined reference

clang 和 gcc 具有复合文字的不同行为

c++ - 何时不在 C 中创建单独的接口(interface) (.h) 和实现 (.c)?

generics - 代数表达式 - Kotlin 建模静态和动态属性的方法

javascript - 动态地将页面内容上的 (http) 切换为安全协议(protocol) (javascript)

c - 在结构上使用 sizeof 运算符

c# - 为什么这个动态参数不起作用?

c - 段错误 - 处理堆栈数据结构