结构中数组的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 cmalLOC 将分配内存并返回适当的指针到分配的内存!如果发现这个答案是有用的,不要忘记验证它!你是对的。