我有一个功能" n"这会创建一个2D数组。在main()
函数中,我使用键" n"来调用此函数。如果功能" n"已被调用它必须解除分配数组(p_spz
)并运行函数" n"并再次创建数组。我的代码:
if ((p_file != NULL) && (p_spz == NULL) && (funkcia == 'n'))
{
p_spz = n(p_file);
}
else if ((p_file != NULL) && (p_spz != NULL) && (funkcia == 'n'))
{
for(int i = 0; i < 5; i++)
{
free(p_spz[i]);
}
free(p_spz);
p_spz = n(p_file);
}
在第一个函数n之后,一切正常,但第二次程序失败。如何正确解除分配?
这是&#34; n&#34;功能
char** n(FILE *p_file) {
int poc = 0, i = 1, j = 0, l, k=0;
char ch;
while (!feof(p_file)) {
ch = fgetc(p_file);
if (ch == '\n') {
poc++;
}
}
poc = poc / 5;
char **p_spz = (char **)malloc(sizeof(char *)*poc);
fseek(p_file, 0L, SEEK_SET);
char riadok[50];
while (fgets(riadok, sizeof(riadok), p_file)) {
if (i == 2) {
p_spz[k] = (char *)malloc(sizeof(char) * 7);
for (l = 0; l < 7; l++) {
p_spz[k][l] = riadok[l];
}
p_spz[k][7] = 0;
k++;
}
else if (i == 5) {
i = 0;
}
i++;
}
fseek(p_file, 0L, SEEK_SET);
return p_spz;
}
它读取一个文件(文件打开,在此函数之上的函数中)。它读取第二行,然后是第五行。然后它将此字符串写入数组。 一切正常,直到我想释放数组。