user-0 提问: 有关动态二维数组释放的问题，求解答。

回复:
user: user-1
content: 如楼上说的 楼主释放的时候多释放了一个

user: user-2
content: 引用 2 楼 maspacious 的回复:[quote=引用 1 楼 turingo 的回复:] 两个for循环不一致： for (i=0; i<=LABEL_NUM; ++i) ... for (int i=0; i <=VERTEX_NUM; ++i)  我知道啊。但是看网上说也是应该这么释放啊[/quote] 要释放的内存应该和分配的内存一一对应，分配了多少就释放多少。这边只为t指向内存中的(VERTEX_NUM+1)的LABEL_NUM+1个指针分配了内存。所以你应该释放LABEL_NUM+1个，而不是VERTEX_NUM+1个

user: user-3
content: 仅供参考//在堆中开辟一个4×5的二维int数组 #include <stdio.h> #include <malloc.h> int **p; int i,j; void main() {     p=(int **)malloc(4*sizeof(int *));     if (NULL==p) return;     for (i=0;i<4;i++) {         p[i]=(int *)malloc(5*sizeof(int));         if (NULL==p[i]) return;     }     for (i=0;i<4;i++) {         for (j=0;j<5;j++) {             p[i][j]=i*5+j;         }     }     for (i=0;i<4;i++) {         for (j=0;j<5;j++) {             printf(" %2d",p[i][j]);         }         printf("\n");     }     for (i=0;i<4;i++) {         free(p[i]);     }     free(p); } //  0  1  2  3  4 //  5  6  7  8  9 // 10 11 12 13 14 // 15 16 17 18 19

user: user-0
content: 引用 13 楼 z1179675084 的回复:[quote=引用 12 楼 maspacious 的回复:] [quote=引用 10 楼 z1179675084 的回复:] [quote=引用 9 楼 maspacious 的回复:] [quote=引用 8 楼 z1179675084 的回复:] [quote=引用 7 楼 maspacious 的回复:] [quote=引用 6 楼 z1179675084 的回复:] [quote=引用 3 楼 z1179675084 的回复:]  int row = 2,col = 3;   int **p = (int **)malloc(sizeof(int *) * row);   int *a = (int *)malloc(sizeof(int) * row *col);   int i = 0;   //申请不成功，自己处理   for(i = 0;i < row;i++)   {   	p[i] = a + i * col;   }  释放时候直接free(a) free（p）,至于你那个本身就是错的[/quote]  我知道我释放的时候不正确。但是我的申请没错吧应该。[/quote] 没有，咱俩的申请本质是一样的[/quote]  那按照我这种申请方式 如何释放。。[/quote] 实在抱歉，一开始没好好看你程序，你这个程序没有问题啊[/quote]  ..如果我把行列数改成相同的 释放就不会出错。。。[/quote] 贴你完整的程序出来看一下，不应该出错啊，除非你别的地方还捣鼓什么了，你这个释放本身就是按行的空间释放啊，没有问题的 你加我Q吧，这里不方便1179675084[/quote]  加你了请通过验证

user: user-4
content: 引用 12 楼 maspacious 的回复:[quote=引用 10 楼 z1179675084 的回复:] [quote=引用 9 楼 maspacious 的回复:] [quote=引用 8 楼 z1179675084 的回复:] [quote=引用 7 楼 maspacious 的回复:] [quote=引用 6 楼 z1179675084 的回复:] [quote=引用 3 楼 z1179675084 的回复:]  int row = 2,col = 3;   int **p = (int **)malloc(sizeof(int *) * row);   int *a = (int *)malloc(sizeof(int) * row *col);   int i = 0;   //申请不成功，自己处理   for(i = 0;i < row;i++)   {   	p[i] = a + i * col;   }  释放时候直接free(a) free（p）,至于你那个本身就是错的[/quote]  我知道我释放的时候不正确。但是我的申请没错吧应该。[/quote] 没有，咱俩的申请本质是一样的[/quote]  那按照我这种申请方式 如何释放。。[/quote] 实在抱歉，一开始没好好看你程序，你这个程序没有问题啊[/quote]  ..如果我把行列数改成相同的 释放就不会出错。。。[/quote] 贴你完整的程序出来看一下，不应该出错啊，除非你别的地方还捣鼓什么了，你这个释放本身就是按行的空间释放啊，没有问题的 你加我Q吧，这里不方便1179675084

user: user-0
content: 引用 10 楼 z1179675084 的回复:[quote=引用 9 楼 maspacious 的回复:] [quote=引用 8 楼 z1179675084 的回复:] [quote=引用 7 楼 maspacious 的回复:] [quote=引用 6 楼 z1179675084 的回复:] [quote=引用 3 楼 z1179675084 的回复:]  int row = 2,col = 3;   int **p = (int **)malloc(sizeof(int *) * row);   int *a = (int *)malloc(sizeof(int) * row *col);   int i = 0;   //申请不成功，自己处理   for(i = 0;i < row;i++)   {   	p[i] = a + i * col;   }  释放时候直接free(a) free（p）,至于你那个本身就是错的[/quote]  我知道我释放的时候不正确。但是我的申请没错吧应该。[/quote] 没有，咱俩的申请本质是一样的[/quote]  那按照我这种申请方式 如何释放。。[/quote] 实在抱歉，一开始没好好看你程序，你这个程序没有问题啊[/quote]  ..如果我把行列数改成相同的 释放就不会出错。。。

user: user-5
content: 怎么分配怎么释放！ 分配：从外到里 释放：从里到外

user: user-4
content: 引用 9 楼 maspacious 的回复:[quote=引用 8 楼 z1179675084 的回复:] [quote=引用 7 楼 maspacious 的回复:] [quote=引用 6 楼 z1179675084 的回复:] [quote=引用 3 楼 z1179675084 的回复:]  int row = 2,col = 3;   int **p = (int **)malloc(sizeof(int *) * row);   int *a = (int *)malloc(sizeof(int) * row *col);   int i = 0;   //申请不成功，自己处理   for(i = 0;i < row;i++)   {   	p[i] = a + i * col;   }  释放时候直接free(a) free（p）,至于你那个本身就是错的[/quote]  我知道我释放的时候不正确。但是我的申请没错吧应该。[/quote] 没有，咱俩的申请本质是一样的[/quote]  那按照我这种申请方式 如何释放。。[/quote] 实在抱歉，一开始没好好看你程序，你这个程序没有问题啊

user: user-0
content: 引用 8 楼 z1179675084 的回复:[quote=引用 7 楼 maspacious 的回复:] [quote=引用 6 楼 z1179675084 的回复:] [quote=引用 3 楼 z1179675084 的回复:]  int row = 2,col = 3;   int **p = (int **)malloc(sizeof(int *) * row);   int *a = (int *)malloc(sizeof(int) * row *col);   int i = 0;   //申请不成功，自己处理   for(i = 0;i < row;i++)   {   	p[i] = a + i * col;   }  释放时候直接free(a) free（p）,至于你那个本身就是错的[/quote]  我知道我释放的时候不正确。但是我的申请没错吧应该。[/quote] 没有，咱俩的申请本质是一样的[/quote]  那按照我这种申请方式 如何释放。。

user: user-4
content: 引用 7 楼 maspacious 的回复:[quote=引用 6 楼 z1179675084 的回复:] [quote=引用 3 楼 z1179675084 的回复:]  int row = 2,col = 3;   int **p = (int **)malloc(sizeof(int *) * row);   int *a = (int *)malloc(sizeof(int) * row *col);   int i = 0;   //申请不成功，自己处理   for(i = 0;i < row;i++)   {   	p[i] = a + i * col;   }  释放时候直接free(a) free（p）,至于你那个本身就是错的[/quote]  我知道我释放的时候不正确。但是我的申请没错吧应该。[/quote] 没有，咱俩的申请本质是一样的

user: user-0
content: 引用 6 楼 z1179675084 的回复:[quote=引用 3 楼 z1179675084 的回复:]  int row = 2,col = 3;   int **p = (int **)malloc(sizeof(int *) * row);   int *a = (int *)malloc(sizeof(int) * row *col);   int i = 0;   //申请不成功，自己处理   for(i = 0;i < row;i++)   {   	p[i] = a + i * col;   }  释放时候直接free(a) free（p）,至于你那个本身就是错的[/quote]  我知道我释放的时候不正确。但是我的申请没错吧应该。

user: user-4
content: 引用 3 楼 z1179675084 的回复: int row = 2,col = 3;   int **p = (int **)malloc(sizeof(int *) * row);   int *a = (int *)malloc(sizeof(int) * row *col);   int i = 0;   //申请不成功，自己处理   for(i = 0;i < row;i++)   {   	p[i] = a + i * col;   }  释放时候直接free(a) free（p）,至于你那个本身就是错的

user: user-4
content: 给你一个答案啊

user: user-0
content: 引用 3 楼 z1179675084 的回复: int row = 2,col = 3;   int **p = (int **)malloc(sizeof(int *) * row);   int *a = (int *)malloc(sizeof(int) * row *col);   int i = 0;   //申请不成功，自己处理   for(i = 0;i < row;i++)   {   	p[i] = a + i * col;   }   ？？

user: user-4
content: int row = 2,col = 3;   int **p = (int **)malloc(sizeof(int *) * row);   int *a = (int *)malloc(sizeof(int) * row *col);   int i = 0;   //申请不成功，自己处理   for(i = 0;i < row;i++)   {   	p[i] = a + i * col;   }

user: user-0
content: 引用 1 楼 turingo 的回复:两个for循环不一致： for (i=0; i<=LABEL_NUM; ++i) ... for (int i=0; i <=VERTEX_NUM; ++i)  我知道啊。但是看网上说也是应该这么释放啊

user: user-6
content: 两个for循环不一致： for (i=0; i<=LABEL_NUM; ++i) ... for (int i=0; i <=VERTEX_NUM; ++i)