我想为数组分配内存,这些数组是我需要使用的结构的成员,位于将该结构作为参数的函数内部。
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;
}
您根本没有为struct A *A
分配内存。在将任何内容分配给A->size
之前,您首先需要执行类似的操作
B->A = malloc(sizeof(struct A));
第二种情况是正确的,但由于在main中声明的B中的A没有被赋值而崩溃。你可能想要类似的东西
struct A A;
struct B B;
B.A = &A;
function_AB(&B);
当您在另一个结构中有结构指针时,首先需要为此分配内存。然后为结构成员分配内存!
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()
的结果!