gpt4 book ai didi

c - 通过引用 C 传递 Struct *

转载 作者:行者123 更新时间:2023-11-30 21:16:09 25 4
gpt4 key购买 nike

+我试图通过引用从主函数传递 CustomStruct 数组,但我做错了:

我认为我正确地要求了内存,但似乎并非如此,因为当我尝试强制某些值时,我会被核心转储,而且我绝对不知道为什么。

void readFile(OwnStruct **restaurant){

FILE *f;
int numTaules = 0;
f = fopen("hello.txt", "r");
if(f == NULL){
printf("Error at opening!\n");
exit(0);
}

fscanf(f,"%d",&numTaules);

//Asking for memory
*restaurant = (OwnStruct*)malloc(sizeof(OwnStruct) * numTaules);

//From here, at some point: Core Dumped
restaurant[0]->ocupades = 1;
restaurant[0]->disponibles = 2;
restaurant[1]->ocupades = 3;
restaurant[1]->disponibles = 4;
printf("%d\n",restaurant[0]->ocupades);
printf("%d\n",restaurant[0]->disponibles);
printf("%d\n",restaurant[1]->ocupades);
printf("%d\n",restaurant[1]->disponibles);

}

int main(){

typedef struct(){
int ocupades;
int disponibles;
}

OwnStruct *restaurant;

readFile(&restaurant);
return 0;
}

最佳答案

您引用的数组错误:

到目前为止一切顺利:

*restaurant = (OwnStruct*)malloc(sizeof(OwnStruct) * numTaules);                                                                         

这是错误的:

restaurant[0]->ocupades = 1;        

应该是:

(*restaurant)[0].ocupades = 1;

您必须取消对您的指针的引用。然后该表达式指向分配的数组的第一个元素。需要括号,因为像 EXPR[0] 这样的后缀运算符优先于像 *EXPR 这样的一元运算符,所以 *EXPR[0] 是视为 *(EXPR[0])

建议:使用本地指针,即Ownstruct *ptr。然后,在从函数返回之前,存储该指针:

*restaurant = ptr;

然后您可以在函数中使用 ptr[0]->field = value 类型代码。

关于c - 通过引用 C 传递 Struct *,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37125275/

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