[問題] qsort的一些問題
這是部分程式碼,不過我編譯時,就是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
推
04/06 00:56, , 1F
04/06 00:56, 1F
→
04/06 01:00, , 2F
04/06 01:00, 2F
推
04/06 01:06, , 3F
04/06 01:06, 3F
→
04/06 01:07, , 4F
04/06 01:07, 4F
→
04/06 01:10, , 5F
04/06 01:10, 5F
推
04/06 01:10, , 6F
04/06 01:10, 6F
→
04/06 01:10, , 7F
04/06 01:10, 7F
→
04/06 01:11, , 8F
04/06 01:11, 8F
→
04/06 01:13, , 9F
04/06 01:13, 9F
→
04/06 01:13, , 10F
04/06 01:13, 10F
推
04/06 01:13, , 11F
04/06 01:13, 11F
→
04/06 01:13, , 12F
04/06 01:13, 12F
→
04/06 01:14, , 13F
04/06 01:14, 13F
→
04/06 01:14, , 14F
04/06 01:14, 14F
→
04/06 01:15, , 15F
04/06 01:15, 15F
→
04/06 01:15, , 16F
04/06 01:15, 16F
→
04/06 01:15, , 17F
04/06 01:15, 17F
→
04/06 01:15, , 18F
04/06 01:15, 18F
→
04/06 01:16, , 19F
04/06 01:16, 19F
→
04/06 01:22, , 20F
04/06 01:22, 20F
→
04/06 01:26, , 21F
04/06 01:26, 21F
→
04/06 01:27, , 22F
04/06 01:27, 22F
→
04/06 01:33, , 23F
04/06 01:33, 23F
→
04/06 12:19, , 24F
04/06 12:19, 24F
→
04/06 12:20, , 25F
04/06 12:20, 25F
→
04/06 12:20, , 26F
04/06 12:20, 26F
→
04/06 12:21, , 27F
04/06 12:21, 27F
→
04/06 13:26, , 28F
04/06 13:26, 28F
→
04/06 13:28, , 29F
04/06 13:28, 29F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章