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



我想为数组分配内存,这些数组是我需要使用的结构的成员,位于将该结构作为参数的函数内部。

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()的结果!

相关内容

  • 没有找到相关文章

最新更新