gpt4 book ai didi

c - C 中的内存管理问题

转载 作者:行者123 更新时间:2023-11-30 14:54:21 25 4
gpt4 key购买 nike

我有以下 C 函数,这给我带来了很多内存问题,如果我不释放内存,它工作正常,但是当我调用另一个函数时,我收到 malloc 内存损坏错误,但我释放它,我得到释放无效指针。最后,当我为 fecha 和 fechaVariable 定义新指针时,由于 strtok 工作得很奇怪,我得到了 Corrupted_size vd prev_size 错误。有人能帮我吗。这是我的代码:

void mensual_precipitacion(struct fila *arregloArchivo, char *precipitacion, int estacion){
float acumulado = 0.00;
char *fecha;
char *fechaVariable;

int i;
int boolIncorrecto = 1;
char *mes;
char *anio;
char *lluvia;
int boolfecha = 1;

fecha = malloc(1000*sizeof(char));
fechaVariable = malloc(1000*sizeof(char));
lluvia = malloc(1000*sizeof(char));



for(i=0;i<cantDatos;i++){

if(arregloArchivo[i].numero != estacion){
continue;
}
boolIncorrecto =0;
if(boolfecha){
strcpy(fecha,arregloArchivo[i].fecha);
boolfecha = 0;

fecha = strtok(fecha,"/");

mes = strtok(NULL,"/");
anio = strtok(NULL," ");
}

strcpy(fechaVariable,arregloArchivo[i].fecha);

fechaVariable = strtok(fechaVariable,"/");

fechaVariable = strtok(NULL, "/");

if(strcmp(mes,fechaVariable) == 0){
acumulado += arregloArchivo[i].precipitacion;

}else{

sprintf(lluvia,"%s/%s:%f[mm]\n",mes,anio,acumulado);
strcat(precipitacion,lluvia);
acumulado = 0.00;
boolfecha = 1;
memset(lluvia,'\0',sizeof(lluvia));
}

}
if(boolIncorrecto){
strcpy(lluvia,"Nro de estacion inexistente");
}else{
sprintf(lluvia,"%s/%s:%f[mm]\n",mes,anio,acumulado);
}
//
//printf("%s\n",lluvia );
strcat(precipitacion,lluvia);

free(fecha);
free(fechaVariable);
free(lluvia);
}

最佳答案

如果 ptr 的值是从 malloc()realloc() 返回的,则只能调用 free(ptr) 。您的代码稍后具有:

fecha = strtok(fecha, "/");

因此,当您到达函数末尾时,fecha 不再包含您执行时最初包含的指针:

fecha = malloc(1000 * sizeof(char));

您应该在循环中使用不同的变量,这样就不会丢失原始的 fecha 指针。

您也有同样的问题:

fechaVariable = strtok(fechaVariable,"/");

所以这里也使用不同的变量。

实际上,根本没有充分的理由对这些变量使用动态分配。只需声明:

char fecha[1000], fechaVariable[1000], lluvia[1000];

然后在 strtok 中使用不同的变量,因为您无法分配给数组变量。

char *fecha_slash = strtok(fecha, "/");
char *fechaVariable_slash = strtok(fechaVariable, "/");

关于c - C 中的内存管理问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46836994/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com