【发布时间】:2019-01-04 08:02:15
【问题描述】:
我正在尝试将结构的数组传递给函数,但是当i 变为 1 acces violation 时,它给了我一个错误。
这是我的代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
typedef struct {
int locuri;
int putere;
char marca[50];
char culoare[50];
int an_fabricatie;
}automob;
void aloca(automob **autos, int n)
{
*autos = (automob*)malloc(sizeof(automob)*n);
if (autos == NULL) {
exit(1);
}
}
void read_autos(const char* filename, automob **A, int *n)
{
FILE *f_in = fopen(filename, "r");
int i = 0, aux;
if (f_in == NULL) {
printf("Nu s-a gasit fisierul!");
_getch();
exit(0);
}
fscanf(f_in, "%d", n);
aloca(A, *n);
while (i < (*n)) {
fscanf(f_in, "%d", &A[i]->locuri);
fscanf(f_in, "%d", &A[i]->putere);
fscanf(f_in, "%s", &A[i]->marca);
fscanf(f_in, "%s", &A[i]->culoare);
fscanf(f_in, "%d", &A[i]->an_fabricatie);
i++;
}
}
void main()
{
int n;
automob *A;
read_autos("autos.in", &A, &n);
_getch();
}
我认为指针 A 没有正确分配,但我真的不知道。你有什么想法?因为当我在主函数中编写它时这有效,但如果我在另一个函数(如read_autos)中正确它就不起作用。
【问题讨论】:
-
你最好检查 fscanf(f_in,"%d",n); 之后的 n 值因为我有点确定问题在那里
-
在 fscanf 语句中的
&之后使用方括号。示例:&A[i]->locuri应该是&(A[i]->locuri) -
我检查了 n 并且没问题,它得到了正确的值。而且我也放了括号,但仍然不起作用。访问违反写入位置0xCCCCCCCC
-
它确实适用于 A[0],但是当它进入 A[1] 时,它给了我错误
-
附带说明,请不要使用
void main()。
标签: c function pointers struct