结构中数组的malloc作为参数传递

结构中数组的malloc作为参数传递,c,arrays,struct,malloc,C,Arrays,Struct,Malloc,我想为数组分配内存,这些数组是我需要使用的结构的成员,在一个以结构为参数的函数中 arg->A.size=(int*) malloc(N*sizeof(int)); 不会编译(对成员“大小”的请求不是一个结构 arg->A->size=(int*) malloc(N*sizeof(int)); 将抛出分段错误 任何帮助都将不胜感激。 以下是代码,谢谢: #include <stdio.h> #include <stdlib.h> #include &

我想为数组分配内存,这些数组是我需要使用的结构的成员,在一个以结构为参数的函数中

arg->A.size=(int*) malloc(N*sizeof(int));
不会编译(对成员“大小”的请求不是一个结构

arg->A->size=(int*) malloc(N*sizeof(int));
将抛出分段错误

任何帮助都将不胜感激。 以下是代码,谢谢:

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

// struct A 
struct A {
    int dim;                // dimensions
    int* size;              // points per dim array
    double* val;            // values stored in array
    int total;              // pow(size,dim) 
};

// struct B that uses A
struct B {
    int tag;
    struct A* A;
};

int function_AB(struct B* B);

int main(void){
    struct B B;
    function_AB(&B);

    return 0;
}

int function_AB(struct B* arg){
    int N=10;
    arg->tag=99;
    printf("tag assigned = %d \n", arg->tag);
    arg->A->size=(int*) malloc(N*sizeof(int));

    return 0;
}
#包括
#包括
#包括
//结构A
结构A{
int dim;//维度
int*size;//每个dim数组的点数
double*val;//存储在数组中的值
int-total;//功率(大小、尺寸)
};
//使用
结构B{
int标签;
结构A*A;
};
int函数_AB(结构B*B);
内部主(空){
结构B;
职能部门(AB&B);
返回0;
}
int函数_AB(结构B*arg){
int N=10;
arg->tag=99;
printf(“分配的标记=%d\n”,参数->标记);
arg->A->size=(int*)malloc(N*sizeof(int));
返回0;
}

您只是没有为
结构A*A
分配内存。在将任何内容分配给
A->size
之前,您首先需要执行以下操作

B->A = malloc(sizeof(struct A));
struct A A;
struct B B;
B.A = &A;

function_AB(&B);

第二种情况是正确的,但是崩溃是因为main中声明的B中的A没有被赋值

B->A = malloc(sizeof(struct A));
struct A A;
struct B B;
B.A = &A;

function_AB(&B);

当结构指针位于另一个结构中时,首先需要为此分配内存,然后为结构成员分配内存

struct B {
    int tag;
    struct A* A;
};
这里的
A
是指向名为
A
的结构的指针。首先为此分配内存,然后为
结构A的元素分配内存

arg->A = malloc(sizeof(struct A));
那就做吧-

arg->A->size = malloc(N*sizeof(int));
int函数(struct B*arg)
-


不要抛出malloc()的结果。

到目前为止,我认为Sathish是正确的(扩展了downhillFromHere在第一个答案中建议的更改)。在函数中实现它正是我想要的,因此我专门使用arg->A=malloc(sizeof(struct A))指令,无论赋值之前/之后如何。我仍然会对大小和val使用malloc int和double casting。有什么理由避免这样做吗?我仍然需要弄清楚在函数返回之前是否必须对A、size和val使用free。如果出现问题,我会更新。非常感谢。@mae In c
malLOC 将分配内存并返回适当的指针到分配的内存!如果发现这个答案是有用的,不要忘记验证它!你是对的。