我已经有一段时间试图找出为什么我在这段代码上遇到分段错误了。它应该从文件中获取一些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;
}
答案 0 :(得分:2)
您写入未初始化指针v + used_size所寻址的位置。
for(used_size=0;fscanf(file,"%d",&v[used_size])==EOF;used_size++){