我试图通过将指针传递给函数来动态分配结构数组。我需要使用索引访问数组。我有一个类似的过程,无需传递给函数。我有一个名为 Account 的简单结构,它只有一个成员 accountNo。下面列出的是相关的malloc调用
int8_t dynamicStruct(struct Account **all_accounts,int8_t num_accounts){
*all_accounts = (struct Account*)malloc(sizeof(struct Account)*num_accounts);
}
变量 all_accounts 使用以下代码片段进行初始化和调用,此时 num_accounts 为 10;
struct Account *all_accounts_dyn;
dynamicStruct(&all_accounts_dyn,num_accounts);
通过以下方法访问成员变量accountNo
all_accounts[i]->accountNo = i;
程序编译良好,设法分配内存,但在访问成员时出现段错误 (num_accounts = 10)。
编译
gcc -std=gnu99 -Wall -Werror structify.c -o structify
“小型独立示例”
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <stdbool.h>
struct Account{
int8_t accountNo;
};
int8_t dynamicStruct(struct Account **all_accounts,int8_t num_accounts);
int main(){
struct Account *all_accounts_dyn;
int8_t num_accounts = 10;
dynamicStruct(&all_accounts_dyn,num_accounts);
return 1;
}
int8_t dynamicStruct(struct Account **all_accounts,int8_t num_accounts){
*all_accounts = (struct Account*)malloc(sizeof(struct Account)*num_accounts);
for(int i = 0; i<num_accounts;i++){
printf("initializing %d\n",i);
all_accounts[i]->accountNo = i;
}
return 1;
}
最佳答案
当你有struct my_struct;
时,你可以像这样访问成员:
mystuff = my_struct.stuff;
但是当你有一个指向结构struct *my_struct;
的指针时,你会:
mystuff = my_struct->stuff;
这相当于:
mystuff = (*my_struct).stuff;
换句话说,您必须先取消对结构体指针的引用,然后才能访问其成员字段。
当您为 10 个结构分配内存时:
*all_accounts = (struct Account*)malloc(sizeof(struct Account)*num_accounts);
然后使用数组表示法进行访问,得到all_accounts[i] ==> *(all_accounts + i)
。因此,all_accounts[i]
是一个结构体,而不是指向结构体的指针,并且必须使用点运算符进行访问。
关于c - 动态分配的结构数组传递给函数并通过索引访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40101887/