释放三重指针

时间:2018-05-28 14:28:15

标签: c pointers free

运行之后(它编译好了),我得到了双重自由或腐败",但只有在我将n设置为奇数时才特别。 n均匀没问题,我真的很困惑......

#include<stdio.h>
#include<stdlib.h>

typedef unsigned int uint;

int main(void)
{   
    int i, j;
    uint n = 3;

    uint*** a = (uint***) malloc( n* sizeof(uint**) );
    for(i=0; i<n; i++)
    {
        *(a + i) = (uint**) malloc( (n)* sizeof(uint*) );
        for(j=0; j<n; j++);
        {
            (*((*(a + i))+j)) = (uint*) malloc(1 * sizeof(uint));
        }
    }

    for(i=0; i<n; i++)
    {
        for(j=0; j<n; j++);
        {
            free (*((*(a + i))+j));
        }
        free (*(a + i));
    }
    free(a);
}

1 个答案:

答案 0 :(得分:6)

这是你的问题:

    for(j=0; j<n; j++);
//                    ^
    {
        (*((*(a + i))+j)) = (uint*) malloc(1 * sizeof(uint));

;行末尾的这个额外for表示你有一个空体循环:

    for(j=0; j<n; j++)
        ;

......接着是一项任务:

        (*((*(a + i))+j)) = (uint*) malloc(1 * sizeof(uint));

此时j == n(由于前面的循环),所以你写的越界了。

free代码(复制/粘贴?)中存在同样的错误。