[問題] 有關於動態記憶體配置

看板C_and_CPP (C/C++)作者 (不再在乎)時間15年前 (2010/10/02 11:26), 編輯推噓2(209)
留言11則, 3人參與, 最新討論串1/3 (看更多)
各位前輩好,小弟想寫一支程式是由user決定array大小和裡面的元素,並進行排列 程式碼如下 #include<stdio.h> #include<stdlib.h> int size=0; int *num,*ans; int aa=0; int ii=0; int jj=0; int i=0; int j=0; int cond=1; int flag=0; int n=0; void cre_num(void){ printf("請輸入矩陣大小\n"); scanf("%d",&size); num=(int*)malloc(size*sizeof(int)); printf("請輸入矩陣原素\n"); while(1){ scanf("%d",&num[ii]); printf("\n"); ii++; if(ii==size) break; } } void change(k){ flag++; aa=num[k-1]; num[k-1]=num[k]; num[k]=aa; } void sort(int len){ for(i=1;i<=len;i++){ if (num[i]<num[i-1]) { change(i); for(j=(i-1);j>=0;j--){ if(num[j]<num[j-1]) change(j); if(num[j-1]>num[j-2]) break; } } } } void print_ans(int len){ for(i=0;i<=(len-1);i++){ printf("%3d",ans[i]); } } void print_num(int len){ for(i=0;i<=(len-1);i++){ printf("%3d",num[i]); } } int main(){ cre_num(); ans=(int*)realloc(num,size*sizeof(int)); sort(size); printf("series is\n"); print_num(size); printf("\n"); printf("answer is\n"); print_ans(size); printf("\n"); printf("資料交換%d次\n",flag); system("pause"); return 0; } 小弟的問題是,如果我用宣告來決定陣列num的情況下是可以成功排序的, 另外cre_num這含數產生出來的陣列的內容也都是對的,可是把他們合在一起後 程式執行的結果都是錯的,原本我debug的方向是我printf_ans和printf_num錯了...但是 簡查很久也真的不知道錯在哪,我想應該是我有觀念錯了...還請各位前輩指點...謝謝... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 180.218.117.45

10/02 11:28, , 1F
宣告指標然後用陣列去存取嗎??
10/02 11:28, 1F

10/02 11:30, , 2F
scanf("%d",&num[ii]) >> scanf("%d",num + ii)
10/02 11:30, 2F

10/02 11:41, , 3F
sort 的引數傳錯, 應該是 sort(size-1), 另外 sort
10/02 11:41, 3F

10/02 11:43, , 4F
的內層迴圈應改成 for(j=(i-1);j>=1;j--), j 要 >= 1
10/02 11:43, 4F

10/02 11:44, , 5F
否則裡面的索引算到 j-1會存取違規, 還有就是不要用
10/02 11:44, 5F

10/02 11:45, , 6F
那麼多全域變數, 明明區域變數就可以做到, 而且不同
10/02 11:45, 6F

10/02 11:45, , 7F
函式內名稱還可以一樣! 你用全域當然就沒這麼好康, 懶
10/02 11:45, 7F

10/02 11:46, , 8F
的想就只能 i、ii、iii...了, 雖然這也是不好的命名
10/02 11:46, 8F

10/02 11:46, , 9F
慣, 請多查字典
10/02 11:46, 9F

10/02 11:46, , 10F
love神真的很有耐心幫偵錯
10/02 11:46, 10F

10/02 11:50, , 11F
我發現還是有地方邏輯有問題, 再回一篇好了
10/02 11:50, 11F
文章代碼(AID): #1CfgPf09 (C_and_CPP)
文章代碼(AID): #1CfgPf09 (C_and_CPP)