我需要你帮助在下面的程序中释放内存。我试过,你可以看到主要,但没有成功。无法理解如何做到这一点。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct{
char name[25];
char street[25];
char citystate[25];
char zip[6];
}student;
typedef student *studinfo;
/*function prototypes*/
void getinfo(student *details[], int *);
int main(void)
{
int count = 0;
student *studptr[49];
getinfo(studptr, &count);/*call getinfo function to get student info*/
/*int i = 0;
for (i; i<count; i++) {
free(studptr[i]->name);
free(studptr[i]->street);
free(studptr[i]->citystate);
free(studptr[i]->zip);
} */
return 0;
}
以下是从文件中获取信息的功能。稍后我将在sort函数和display函数中使用此信息来显示结果。之后,我应该释放内存。
void getinfo(student *details[], int *count)
{
char s[100];
studinfo info;
/*Get student information*/
while (gets(s) != NULL) {
info = (studinfo)malloc(sizeof(student));
strcpy(info->name, s);
gets(info->street);
gets(info->citystate);
gets(info->zip);
details[(*count)++] = info; /*Increase the pointer to next position*/
} /* End of while loop*/
} /* End of getinfo */
答案 0 :(得分:1)
您的代码有三个问题:
struct student
的组件。由于这些组件数组未分配malloc
,因此您无法释放它们;您只需要释放struct
本身。gets
,这可能会导致缓冲区溢出。您应该使用fgets
代替,传递缓冲区大小,stdin
代表FILE*
参数。s[100]
复制到info->name
。这可能会超出缓冲区,因为info->name
只能容纳25个字符。修复这些问题后,您的程序应该正常运行。
答案 1 :(得分:1)
应该是:
int i;
for (i = 0; i < count; i++) {
free(studptr[i]);
}
由于您将每个student
分配为一个块,因此您可以采用相同的方式释放它们。