Closed. This question is
off-topic。它当前不接受答案。
想改善这个问题吗?
Update the question,所以它是
on-topic,用于堆栈溢出。
2年前关闭。
我正在编写一个C程序,并分配了一些内存,当我尝试释放它时,出现了段错误。不知道我在做什么错。这是函数:
我仅在释放令牌而不是registro时收到错误。
void cargarArchivo(struct fila *arregloArchivo){
FILE *csv = fopen("datos_meteorologicos.CSV","r");
char *registro;
char *token;
struct fila local;
int i;
int j;
registro = (char *)malloc(sizeof(char));
token = (char *)malloc(100*sizeof(char));
size_t characters;
size_t registro_size = 32;
if(registro==NULL || arregloArchivo==NULL){
printf("%s\n", "Problemas alocando memoria, no hay suficiente");
exit(1);
}
while(-1 != getline(®istro,®istro_size,csv)){
token = strtok(registro,",");
for(j=0;j<cantDatos+1;j++){
if(j<1){
token = strtok(NULL,",");
token = strtok(NULL,",");
token = strtok(NULL,",");
token = strtok(NULL,",");
token = strtok(NULL,",");
token = strtok(NULL,",");
token = strtok(NULL,",");
token = strtok(NULL,",");
token = strtok(NULL,",");
token = strtok(NULL,",");
token = strtok(NULL,",");
token = strtok(NULL,",");
token = strtok(NULL,",");
token = strtok(NULL,",");
token = strtok(NULL,",");
token = strtok(NULL,",");
token = strtok(NULL,",");
token = strtok(NULL,",");
token = strtok(NULL,",");
token = strtok(NULL,",");
}
else if(j==1){
local.numero = atoi(token);
//printf("numero:%d\n",local.numero );
token = strtok(NULL,",");
strcpy(local.estacion,token);
//printf("estacion:%s\n",local.estacion );
token = strtok(NULL,",");
local.localidad = atoi(token);
//printf("loca%d\n",local.localidad );
token = strtok(NULL,",");
strcpy(local.fecha,token);
//printf("fec%s\n",local.fecha );
token = strtok(NULL,",");
local.temperatura = atof(token);
//printf("temperatura%f\n",local.temperatura );
token = strtok(NULL,",");
local.porcentajeHumedad = atof(token);
//printf("porHum: %f\n",local.porcentajeHumedad );
token = strtok(NULL,",");
local.puntoRocio = atof(token);
//printf("punto rocio: %f\n",local.puntoRocio );
token = strtok(NULL,",");
local.precipitacion = atof(token);
//printf("prec:%f\n",local.precipitacion );
token = strtok(NULL,",");
local.velocidadViento = atof(token);
//printf("velviento:%f\n",local.velocidadViento );
token = strtok(NULL,",");
strcpy(local.dirViento,token);
//printf("dirviento: %s\n",local.dirViento );
token = strtok(NULL,",");
local.rafagaMax = atof(token);
//printf("rafagamax: %f\n",local.rafagaMax );
token = strtok(NULL,",");
local.presion = atof(token);
//printf("presion:%f\n",local.presion );
token = strtok(NULL,",");
local.radiacionSolar = atof(token);
//printf("rad:%f\n",local.radiacionSolar );
token = strtok(NULL,",");
local.tempSuelo1 = atof(token);
//printf("tempSuelo1:%f\n",local.tempSuelo1 );
token = strtok(NULL,",");
local.tempSuelo2 = atof(token);
//printf("tempSuelo2:%f\n",local.tempSuelo2 );
token = strtok(NULL,",");
local.tempSuelo3 = atof(token);
//printf("tempSuelo3:%f\n",local.tempSuelo3 );
token = strtok(NULL,",");
local.humedadSuelo1 = atof(token);
//printf("humedad1: %f\n",local.humedadSuelo1 );
token = strtok(NULL,",");
local.humedadSuelo2 = atof(token);
//printf("humedad2: %f\n",local.humedadSuelo2 );
token = strtok(NULL,",");
local.humedadSuelo3 = atof(token);
//printf("humedad3: %f\n",local.humedadSuelo3 );
token = strtok(NULL,", ");
local.humedadHoja = atof(token);
//printf("hum hoja: %f\n",local.humedadHoja );
arregloArchivo[j-1] = local;
}else{
token = strtok(NULL,",");
local.numero = atoi(token);
//printf("num: %d\n",local.numero);
token = strtok(NULL,",");
strcpy(local.estacion,token);
//printf("estacion:%s\n",local.estacion );
token = strtok(NULL,",");
local.localidad = atoi(token);
//printf("loca%d\n",local.localidad );
token = strtok(NULL,",");
strcpy(local.fecha,token);
//printf("fec%s\n",local.fecha );
token = strtok(NULL,",");
local.temperatura = atof(token);
//printf("temperatura%f\n",local.temperatura );
token = strtok(NULL,",");
local.porcentajeHumedad = atof(token);
//printf("porHum: %f\n",local.porcentajeHumedad );
token = strtok(NULL,",");
local.puntoRocio = atof(token);
//printf("punto rocio: %f\n",local.puntoRocio );
token = strtok(NULL,",");
local.precipitacion = atof(token);
//printf("prec:%f\n",local.precipitacion );
token = strtok(NULL,",");
local.velocidadViento = atof(token);
//printf("velviento:%f\n",local.velocidadViento );
token = strtok(NULL,",");
strcpy(local.dirViento,token);
//printf("dirviento: %s\n",local.dirViento );
token = strtok(NULL,",");
local.rafagaMax = atof(token);
//printf("rafagamax: %f\n",local.rafagaMax );
token = strtok(NULL,",");
local.presion = atof(token);
//printf("presion:%f\n",local.presion );
token = strtok(NULL,",");
local.radiacionSolar = atof(token);
//printf("rad:%f\n",local.radiacionSolar );
token = strtok(NULL,",");
local.tempSuelo1 = atof(token);
//printf("tempSuelo1:%f\n",local.tempSuelo1 );
token = strtok(NULL,",");
local.tempSuelo2 = atof(token);
//printf("tempSuelo2:%f\n",local.tempSuelo2 );
token = strtok(NULL,",");
local.tempSuelo3 = atof(token);
//printf("tempSuelo3:%f\n",local.tempSuelo3 );
token = strtok(NULL,",");
local.humedadSuelo1 = atof(token);
//printf("humedad1: %f\n",local.humedadSuelo1 );
token = strtok(NULL,",");
local.humedadSuelo2 = atof(token);
//printf("humedad2: %f\n",local.humedadSuelo2 );
token = strtok(NULL,",");
local.humedadSuelo3 = atof(token);
//printf("humedad3: %f\n",local.humedadSuelo3 );
token = strtok(NULL,", ");
local.humedadHoja = atof(token);
//printf("hum hoja: %f\n",local.humedadHoja );
arregloArchivo[j-1] = local;
}
}
}
free(registro);
printf("%s\n","Fin de la carga." );
free(token);
printf("%s\n","libere token" );
fclose(csv);
}
我是一名优秀的程序员,十分优秀!