我有结构:
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]?我不知道如何将结构作为参数传输。谢谢你的帮助。
答案 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()
。