【发布时间】:2015-02-13 20:14:53
【问题描述】:
我知道我需要在这里的某个地方使用 free(),但我不确定在哪里。
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() 的末尾使用它,在 print 语句之后,但是那里的上下文仍然可用吗?我不相信我可以在 build() 结束时释放 (*infoArr),因为我需要在其他地方访问该数组,这就是 build() 的重点。 build() 旨在用于多个功能。如果我在 function1() 的末尾使用 free(),我是使用 free(infoArr) 还是 free(build()) 或完全使用其他东西?
【问题讨论】:
标签: c arrays pointers struct free