【发布时间】:2019-11-04 02:56:58
【问题描述】:
我正在执行一个 RPC 程序,但在服务器端我的内存已损坏,但我不知道具体原因,所有功能都可以正常工作,但这个。
我首先尝试使用 strndup,然后在结构变量上将其更改为 malloc 和 strcpy,但两者都不起作用。
编辑:也尝试了 strdup,但内存仍然损坏
编辑已修复:问题是“角色”上的 malloc,sizeof 错误。
结构体
struct facturar {
int idReserva;
int idReg;
int idPlaza;
int fila;
int asiento;
char *nombre;
char *dni;
struct facturar *siguiente;
};
typedef struct facturar facturar;
struct datos_facturacion {
struct facturar *lista;
};
typedef struct datos_facturacion datos_facturacion;
static datos_facturacion result;
char buffer[200];
struct facturar * persona;
xdr_free((xdrproc_t)xdr_datos_facturacion,(char *)&result);
// ...
f = fopen("DatosReservas", "r");
f2 = fopen("Ffacturacion", "a");
idr = argp->idVuelo;
while(fgets(buffer, sizeof(buffer), f) != NULL){
c2 = malloc(strlen(buffer) + 1);
strcpy(c2, buffer);
c = strtok_r(c2, ":", &c1);
printf("%d-%d-\n", idr, atoi(c));
if(idr == atoi(c)){
persona = malloc(sizeof(persona));;
persona->idReserva = idr;
fprintf(f2, "%d:", idr);
c = strtok_r(NULL, ":", &c1);
printf("%s\n", c);
persona->idReg = idreg;
fprintf(f2, "%d:", idreg);
c = strtok_r(NULL, ":", &c1);
printf("%s\n", c);
persona->idPlaza = atoi(c);
fprintf(f2, "%d:", atoi(c));
if(asAsignado == asiento){
fAsignada = fAsignada + 1;
asAsignado = 1;
}
persona->fila = fAsignada;
fprintf(f2, "%d:", fAsignada);
persona->asiento = asAsignado;
fprintf(f2, "%d:", asAsignado);
c = strtok_r(NULL, ":", &c1);
printf("Cadena antes de Malloc: %s\n", c);
persona->nombre = malloc(strlen(c) + 1);
strcpy(persona->nombre, c);
fprintf(f2, "%s:", c);
c = strtok_r(NULL, ":", &c1);
printf("Cadena dps de malloc %s\n", persona->nombre);
printf("Cadena antes de Malloc2: %s\n", c);
persona->dni = malloc(strlen(c) + 1);
strcpy(persona->dni, c);
printf("Cadena despues de Malloc2: %s\n", persona->dni);
fprintf(f2, "%s\n", persona->dni);
persona->siguiente = result.lista;
result.lista = persona;
}
free(c2);
}
fclose(f);
fclose(f2);
return &result;
在最后一次迭代中,我在最后一次 malloc 中得到了错误
错误: malloc():内存损坏 中止(核心转储)
要测试的新输出:
Cadena before of Malloc: Alberto // 打印 strtok_r 的 "c" malloc之后的Cadena Alberto //在malloc之后打印角色->nombre Malloc2之前的Cadena:33445511J Malloc2 之后的 Cadena: 33445511J //printing persona->dni after malloc
马洛克之前的卡德纳:胡安 malloc Juan 之后的 Cadena Malloc2之前的Cadena:92312321C Malloc2后的Cadena:92312321C
Malloc 的 Cadena antes:Pepe Macias malloc Pepe Macias 的 Cadena dps Malloc2 的 Cadena antes:39421294D Malloc2 的 Cadena depues: 39421294D
Malloc 之前的 Cadena:Ignacio Gutierrez Povedilla malloc Ignacio Gutierrez Povedilla 之后的 Cadena Malloc2之前的Cadena:92123421Y malloc():内存损坏 Abortado(`核心'generado)
【问题讨论】: