【问题标题】:Insertion Sort Segmentation Fault插入排序分段错误
【发布时间】:2014-11-05 18:14:03
【问题描述】:

我有两个全局变量 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;
}

【问题讨论】:

  • 你没有在调试器中尝试过,是吗?
  • 可能连编译都没有……
  • 我尝试在 valgrind 中运行它,但它说我对 fscanf 的权限不好,并且我分配了两次但没有释放
  • @Wingman 好吧.. 这就是问题所在!
  • 你最喜欢的调试器会告诉你段错误发生在哪里。

标签: c segmentation-fault insertion-sort


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-04
    • 1970-01-01
    • 2016-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-18
    相关资源
    最近更新 更多