Я знаю, что мне нужно использовать free() здесь где-то, но я не знаю, где.C, Где находится правильное место бесплатно()?
struct info{
char string1[30];
float float1;
int int1;
char string2[30];
};
struct info* build(){
FILE *data;
int i, lines;
lines=0;
data=fopen("hw3.data","r");
struct info info;
struct info *infoArr;
infoArr = (struct info*)calloc(lines,sizeof(struct info));
for(i=0; i<2; i++){ //change not to 2
fscanf(data, "%s %f %d %s", info.string1, &info.float1, &info.int1, info.string2);
strcpy(infoArr[i].string1, info.string1);
infoArr[i].float1 = info.float1;
infoArr[i].int1 = info.int1;
strcpy(infoArr[i].string2, info.string2);
}
fclose(data);
return infoArr;
}
void function1(){
int i; for(i=0; i<2; i++){
printf("%s %f %d %s\n", build()[i].string1, build()[i].float1, build()[i].int1, build()[i].string2);
}
}
Я хочу, чтобы использовать его в конце function1(), после того, как заявление для печати, но контекст по-прежнему будет доступен там? Я не уверен, что могу освободить (* infoArr) в конце build(), поскольку мне нужно получить доступ к этому массиву в другом месте, что является целым рядом с build(). build() предназначен для использования в нескольких функциях. Если я использую free() в конце функции1(), я использую бесплатный (infoArr) или свободный (build()) или что-то еще полностью?