作者dj533kevin (很久没唬烂了)
看板C_and_CPP
标题[问题] 二维动态阵列 free会错误
时间Thu Oct 22 10:35:50 2009
以下不是完整的程式码,只是我将无关紧要的部份给删掉了
而且经实验证明,即使是这样子在编译後,程式也会出现记忆错误
编译是都没问题的。
我一个一个试的结果,将free(all);去掉的话,程式就会正常执行
这是不是代表我在给空间时有出错?
二维 malloc 跟 free 的用法都是去翻板上的旧资料做的
所以想不到问题在哪,还请各位神人帮忙一下。
#include<stdio.h>
#include<stdlib.h>
int n;
int catalan(void);
int main(void){
int i=1,Cn;
int **all;
printf("type any real number here\n");
scanf("%d",&n);
Cn=catalan();
all = (int**)malloc(Cn*sizeof(int*));
for (i=0;i<=Cn;i++){
all[i]=(int*)malloc((2*n+1)*sizeof(int));
}
for (i=0;i<=Cn;i++){
free(all[i]);
}
free(all);
return 0;
}
int catalan(void){
int i,Cn=1,c=1;
for (i=n+1;i<=2*n;i++){
Cn=Cn*i;
c=c*(i-n);
}
Cn=Cn/((n+1)*c);
printf("\nThere are %d sequence in Cn! \n",Cn);
return Cn;
}
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 124.8.155.103
1F:→ james732:for (i=0;i<=Cn;i++) 改成 for (i=0;i<Cn;i++) 试试? 10/22 10:37
2F:推 Ebergies:嗯, 因为你只有 Cn 个 int*, 要不要算算 0~Cn 有几个数 10/22 10:41
3F:→ dj533kevin:对耶,竟然没发现...谢谢了。还有我确实要用到cn+1个位 10/22 10:54
4F:→ dj533kevin:置,所以=Cn没办法动 10/22 10:54
5F:推 ledia:看起来 n 不能太大... 15/16 就差不多了, 记得检查 malloc 10/22 11:33
6F:→ ledia:是否成功 10/22 11:33
7F:→ dj533kevin:经楼上提示,我去试了一下大数字的部份,结果在9之後就 10/22 12:14
8F:→ dj533kevin:会爆掉,而且我猜是int的型态不够吧....我再试试= = 10/22 12:14