在此代码上获取分段错误

时间:2017-05-16 18:57:11

标签: c file segmentation-fault malloc

我已经有一段时间试图找出为什么我在这段代码上遇到分段错误了。它应该从文件中获取一些11位数的数字,找出哪些数字以相同的4个数字开头并在屏幕上列出。

   #include <stdio.h>

   #include <stdlib.h>

   #include <string.h>

    #define CHOP_SIZE 5

    #define INIT_CHOP 100


    typedef enum{
        OK,
        ERROR_MEMORY,
        ERROR_NULL_POINTER,
    } state_t; 

    state_t list(FILE * file,int number){
        int *v, *aux;
        size_t used_size;
        size_t alloc_size, i;
        for(used_size=0;fscanf(file,"%d",&v[used_size])==EOF;used_size++){
            if(used_size==0){
                if((v=(int*)malloc(sizeof(int)*INIT_CHOP))==NULL)return ERROR_MEMORY;
                alloc_size=1;
            }   
            if(used_size==alloc_size){
                if((aux=(int*)realloc(v,sizeof(int)*(alloc_size+CHOP_SIZE)))==NULL){
                    free(v);
                    v=NULL;
                    return ERROR_MEMORY;
                }
                alloc_size+=CHOP_SIZE;
                v=aux;
            }
        }
        for(i=0;i<used_size;i++){
            if(v[i]/10000000==number){
                printf("%d\n",v[i]);
            }
        }
        return OK;
    }

    int main(void){
        FILE *file;
        state_t state;
        file=fopen("file1","rb");
        state=list(file, 1111);
        return EXIT_SUCCESS;
    }

1 个答案:

答案 0 :(得分:2)

您写入未初始化指针v + used_size所寻址的位置。

 for(used_size=0;fscanf(file,"%d",&v[used_size])==EOF;used_size++){