2014-11-05 63 views
-3

我有两个全局变量COUNT=0;SIGN=0; 后来我#define SIZE 100插入排序分段错误

我不断收到在我的代码赛格故障,但我也不太清楚的地方,如果你们能帮助别针把它下来我会很感激。

它应该打印出插入从txt文档读入的数据时进行的分配总数。我不确定我是否理解什么是任务,但这是我的失败。

void insert(int x[], int n){ 
int key,y,z; 
COUNT++; 
    for(z=1; z<n-1; z++){ 
     key=x[z]; 
     SIGN++; 
     for(y=(z-1); y<0||key>=x[y]; y--){ 
      x[y+1]=x[y]; 
      SIGN++; 
     } 
     x[y+1]=KEY; 
    } 
int main(){ 
    FILE *fp; 
    fp=fopen("data.txt","r"); 
    int #temp; 
    int i=0; 
    int *sort=NULL; 
    sort=(int *)malloc(SIZE*sizeof(sort)); 
    while(fp!=NULL){ 
     fscanf(fp, "%d", temp); 
     sort[i]=(int)temp; 
     i++; 
    } 
    insert(sort, SIZE); 
    printf("number of Assignments=%d", SIGN); 
    return 0; 
} 
+3

你没有在调试器中试过这个,是吗? – 2014-11-05 18:17:50

+0

可能甚至没有编译... – mafso 2014-11-05 18:18:36

+0

我尝试在valgrind中运行它,但它说我与fscanf的权限不好,而且我分配了两次,但没有释放 – Wingman 2014-11-06 01:25:49

回答

0

在你的下面的代码中,你不用担心内存溢出。

while(fp!=NULL){ 
     fscanf(fp, "%d", temp); 
     sort[i]=(int)temp; 
     i++; 
    } 

你分配的内存大小INT。如果文件大小很大(超出分配的内存大小),那么你的代码将访问超出分配内存的内存。所以这可能会导致问题