我想为一个需要使用的结构的成员的数组分配内存,在一个以struct为参数的函数中。
arg->A.size=(int*) malloc(N*sizeof(int));
将无法编译(请求成员'size'不是结构。
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;
}
答案 0 :(得分:1)
您根本没有为struct A *A
分配内存。在为A->size
分配任何内容之前,您首先需要执行类似
B->A = malloc(sizeof(struct A));
答案 1 :(得分:1)
第二种情况是正确的,但崩溃是因为在main中声明的B内部的A尚未赋值。你可能想要像
这样的东西struct A A;
struct B B;
B.A = &A;
function_AB(&B);
答案 2 :(得分:0)
如果在另一个结构中有结构指针,首先需要为其分配内存。然后为结构成员分配内存!
struct B {
int tag;
struct A* A;
};
此处A
是指向名为A
的结构的指针。首先为此分配内存,然后为struct A
arg->A = malloc(sizeof(struct A));
然后做 -
arg->A->size = malloc(N*sizeof(int));
在int function_AB(struct B* arg)
-
int function_AB(struct B* arg){
int N=10;
arg->tag=99;
printf("tag assigned = %d \n", arg->tag);
arg->A = malloc(sizeof(struct A)); // First allocate the memory for struct A* A;
arg->A->size = malloc(N*sizeof(int)); // Allocate the memory for struct A members
arg->A->val = malloc(N*sizeof(double));
// do your stuff
// free the allocated memories here
free(arg->A->size);
free(arg->A->val);
free(arg->A);
return 0;
}
不要投射malloc()
的结果!