C_and_CPP 板


LINE

這是部分程式碼,不過我編譯時,就是qsort()那一個東西發生問題 #include <stdio.h> #include <stdlib.h> #include <time.h> #include <string.h> #include <algorithm> char* fileName = "studat.txt"; void test( ); void sort( ); void print( ); void print1( ); void getscore(); int myCompare(const void*a,const void *b); typedef struct{}tmp; typedef struct{ long id; char name[9]; int s1,s2,s3,s4; double final; float sum; }Student; Student student[3388],stmp; int main( ) { long long tStart, tStop; double tRun; getscore(); test( ); // 讀取檔案到記憶體 // 算出每個人的學期總成績 printf("Before sort...\n"); print( ); // 叫用 print( ) 印出部份資料 tStart = clock( ); sort( ); // 叫用 你的 sort 程式 tStop = clock( ); tRun = 1.0*(tStop - tStart)/CLOCKS_PER_SEC; printf("...Sorting done in %.5f seconds.\n", tRun); printf("After sort...\n"); print1( ); fprintf(stderr, "Hit ENTER key..."); getchar( ); return 0; } void print( ) { int i; printf("學號 姓名 s1 s2 s3 s4 平均成績\n"); printf("1~10個:\n"); for(i=0;i<10;i++){ printf("%ld %2s %2d %2d %2d %2d %.2f\n",student[i].id,student[i].name,student[i].s1,student[i].s2,student[i].s3,student[i].s4,student[i].sum); } printf("3378~3388個:\n"); for(i=3377;i<3388;i++){ printf("%ld %s %2d %2d %2d %2d %.2f\n",student[i].id,student[i].name,student[i].s1,student[i].s2,student[i].s3,student[i].s4,student[i].sum); } } 以上不是重點,但是重點來了!!!!!! int myCompare(const void*a,const void*b){ Student *p1=(Student*)a; Student *p2=(Student*)b; if((*p1).sum < (*p2).sum){ return -1;} if((*p1).sum>(*p2).sum){ return 1;} return 0; } void sort(){ int student_size=(sizeof(student)/sizeof(student[0])); qsort(student,student_size,sizeof(student),myCompare); } 問題來了,就是我這樣寫compiler會給我過,但是程式跑到一半,他就會跑出一個對話 視窗,他說應用程式發生錯誤, "0x004016e1"指令參考的.......記憶體。該記憶體不能為"read"。 請按[確定]終止程式 請按[取消]進行程式偵錯 但是神奇的就是如果我把student_size改成"1" 就是qsort(student,1,sizeof(student),myCompare); 這樣就可以執行而且還是對的! 因此我就困惑了?? 我是那裡寫錯呢?? --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.113.62.11
1F:推 snowlike:靜態陣列宣告能那麼大?再來compare的return值是交換依據 04/06 00:56
2F:→ snowlike:沒看到return 1,-1的部份  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄請忽略QQ 04/06 01:00
3F:推 sunneo:如果宣告/定義在全域變數的 會反應在檔案大小 04/06 01:06
4F:→ wheredo:這樣我要怎樣修改勒?靜態陣列好像沒有那麼大吼~ 04/06 01:07
5F:→ wheredo:呃....snowlike大大你講的後面那一句,我不懂欸? 04/06 01:10
6F:推 sunneo:因為sizeof(student) != sizeof(Student) 04/06 01:10
7F:→ sunneo:大小寫錯了 04/06 01:10
8F:→ sunneo:且1 * sizeof(student) == student_size * sizeof(Student) 04/06 01:11
9F:→ wheredo:不過Student他不是一個型別嘛?我上面有寫一個struct 04/06 01:13
10F:→ wheredo:我寫這樣算個數應該不會有錯吧,不過他執行就是會有錯 04/06 01:13
11F:推 sunneo:當然是型別啊... qsort需要的參數是(陣列,個數,元素大小) 04/06 01:13
12F:→ sunneo:sizeof(Student) 才是單一個Student物件的大小 04/06 01:13
13F:→ sunneo:sizeof(student)得到的是 3328個Student物件的大小 04/06 01:14
14F:→ sunneo:如果你填student_size,sizeof(student) 04/06 01:14
15F:→ sunneo:那會是3328個 (3328個Student) 的Student物件大小 04/06 01:15
16F:→ sunneo:也就是3328 * 3328 * sizeof(Student) 04/06 01:15
17F:→ wheredo:謝謝!我懂了 04/06 01:15
18F:→ sunneo:與你原本想表達的"對3328個Student物件排序"的意思差多了 04/06 01:15
19F:→ sunneo:不過原來我剛剛一直看錯啊...是3388 不是3328 04/06 01:16
20F:→ snowlike:呵感謝解答,後面那句是以為myCompare只有return 0的意思 04/06 01:22
21F:→ wheredo:只有return 0的意思? 04/06 01:26
22F:→ wheredo:不是有一堆的if嘛? 04/06 01:27
23F:→ snowlike:so 二樓才那樣說 04/06 01:33
24F:→ wheredo:那我問一個和程式無關的問題,就是有時候我的pcman也會跑 04/06 12:19
25F:→ wheredo:出那一個對話窗,說是應用程式出問題,按下確定後 04/06 12:20
26F:→ wheredo:你的pcman就關掉了!! 04/06 12:20
27F:→ wheredo:這是我pcman本身的問題嘛? 04/06 12:21
28F:→ henry666666:還滿靈異的 為什麼你可以把我的pcman關掉 04/06 13:26
29F:→ henry666666:沒寫好 用到不該用的記憶體? 04/06 13:28







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:e-shopping站內搜尋

TOP