如何在函数结构中使用malloc数组

时间:2015-12-02 18:24:49

标签: c arrays pointers struct

我有结构:

typedef struct akcie
{
    int *stockArray;
} AKCIE;

声明

 AKCIE *idStock;

Malloc idStock

idStock = ( AKCIE *)malloc( id * sizeof( int )); // id is an integer

现在我想要malloc到每个idStock [i],i = 1,2,3,..... stockArray in function等.void(参数){malloc每个idStock [i] .stockArray; }。

如何在功能中分配idStock [0],idStock [1]?我不知道如何将结构作为参数传输。谢谢你的帮助。

3 个答案:

答案 0 :(得分:1)

需要两个malloc。一个用于AKCIE数组,另一个用于每个int数组。下面是静态大小的数组的示例:

#define STRUCT_ARRAY_DEPTH (10)
#define INT_ARRAY_DEPTH    (20)

int i;
AKCIE *idStock;

idStock = malloc(STRUCT_ARRAY_DEPTH * sizeof(*idStock));
for(i = 0; i < STRUCT_ARRAY_DEPTH; i++)
    idStock[i].stockArray = malloc(INT_ARRAY_DEPTH * sizeof(int));

答案 1 :(得分:0)

这是不正确的:

idStock = ( AKCIE *)malloc( id * sizeof( int ));

假设idStock被视为一个数组,并且id是该数组的长度,那么您不会分配适当的空间量。您只为多个int变量分配空间,但该结构包含int *,其大小可能不同。

你想要的是这个:

idStock = ( AKCIE *)malloc( id * sizeof( AKCIE ));

这将分配长度为AKCIE的{​​{1}}个数组。执行此操作后,您无需分配单个阵列成员,因为它已经完成。

答案 2 :(得分:0)

这就是为结构中的每个元素分配内存的方法。

这是程序:

void procedure(AKCIE *idStock, int n){ //n is the dim
        int i;
        for(i=0; i<n; i++){
          idStock[i].stockArray = (int *)malloc(HOW_MANY_DO_YOU_NEED * sizeof(int));
        }
    }

这就是你怎么称呼它:

    .
    .
    .
    procedure(idStock, dim);
    .
    .
    .

PS:为idStock分配内存时出错。它不包含int,但int *

为了避免这种错误,你可以将整个结构传递给函数sizeof()