[問題] 二維動態陣列 free會錯誤

看板C_and_CPP作者 (很久沒唬爛了)時間16年前 (2009/10/22 10:35), 編輯推噓2(206)
留言8則, 4人參與, 最新討論串1/2 (看更多)
以下不是完整的程式碼,只是我將無關緊要的部份給刪掉了 而且經實驗證明,即使是這樣子在編譯後,程式也會出現記憶錯誤 編譯是都沒問題的。 我一個一個試的結果,將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

10/22 10:37, , 1F
for (i=0;i<=Cn;i++) 改成 for (i=0;i<Cn;i++) 試試?
10/22 10:37, 1F

10/22 10:41, , 2F
嗯, 因為你只有 Cn 個 int*, 要不要算算 0~Cn 有幾個數
10/22 10:41, 2F

10/22 10:54, , 3F
對耶,竟然沒發現...謝謝了。還有我確實要用到cn+1個位
10/22 10:54, 3F

10/22 10:54, , 4F
置,所以=Cn沒辦法動
10/22 10:54, 4F

10/22 11:33, , 5F
看起來 n 不能太大... 15/16 就差不多了, 記得檢查 malloc
10/22 11:33, 5F

10/22 11:33, , 6F
是否成功
10/22 11:33, 6F

10/22 12:14, , 7F
經樓上提示,我去試了一下大數字的部份,結果在9之後就
10/22 12:14, 7F

10/22 12:14, , 8F
會爆掉,而且我猜是int的型態不夠吧....我再試試= =
10/22 12:14, 8F
文章代碼(AID): #1AtyK93t (C_and_CPP)
文章代碼(AID): #1AtyK93t (C_and_CPP)