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

问题描述 投票:-1回答:3

我已分配的内存为两种结构,我想给一些值到structures.However的成员,它不工作,我不知道该怎么办。请帮我明白发生了什么。这是我的代码:

#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;
}
c dynamic structure
3个回答
1
投票

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

error: invalid type argument of ‘->’ (have ‘struct rec’)

和gcc也将告诉你这个错误发生,例如:

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

出现这种情况,因为你试图取消引用您已经提领p[0]

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


0
投票

这是我想获得:

#include <stdio.h>
#include <stdlib.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';

    printf("%d\t%f\t%c\n", (p + 0)->i, (p + 0)->f, (p + 0)->c);
    printf("%d\t%f\t%c\n", (p + 1)->i, (p + 1)->f, (p + 1)->c);
    free(p);

    getchar();
    return 0;
}

0
投票
  1. 记住要检查malloc的返回值,也可能是0。
  2. 此外,我已经重写你的代码,从而p是指向2 struct rec数组,所以代码的主要部分的使用是更接近你想要的东西原来。
  3. 此外,从未蒙上了malloc的结果,你可以隐藏不匹配的指针类型的讨厌的错误,如果你以后更改所声明的指针类型。
  4. 最后,总是试图在那里你malloc sizeof运算你指向的东西使用malloc成语。这样,如果你决定改变你mallocing的事情,正确的大小总是返回。

#include <stdio.h>
#include <stdlib.h>

struct rec{
    int i;
    double f;
    char c;
};

int main(void){    
    struct rec (*p)[2] = malloc(sizeof *p);

    if(p)
    {
        (*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';

        printf("%d\t%f\t%c\n", (*p)[0].i, (*p)[0].f, (*p)[0].c);
        printf("%d\t%f\t%c\n", (*p)[1].i, (*p)[1].f, (*p)[1].c);

        free(p);
    }

    getchar();
    return 0;
}
© www.soinside.com 2019 - 2024. All rights reserved.