解除分配2D数组并在函数C中创建

时间:2017-11-12 14:57:48

标签: c

我有一个功能" 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;
}

它读取一个文件(文件打开,在此函数之上的函数中)。它读取第二行,然后是第五行。然后它将此字符串写入数组。 一切正常,直到我想释放数组。

0 个答案:

没有答案