作者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