gpt4 book ai didi

c - 传递给函数并通过索引访问的动态分配的结构数组

转载 作者:太空宇宙 更新时间:2023-11-03 23:20:52 25 4
gpt4 key购买 nike

我正在尝试通过将指针传递给函数来动态分配结构数组。我需要使用索引访问数组。我有一个类似的过程在不传递给函数的情况下工作。我有一个名为 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com