gpt4 book ai didi

C RPC 服务器 malloc 内存损坏

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

我正在做一个 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 中遇到了错误

Error : malloc(): memory corruption aborted (core dumped)

New output to test :

Malloc 之前的 Cadena:Alberto//打印 strtok_r 的“c”Cadena after of malloc Alberto//在 malloc 之后打印 persona->nombreMalloc2 之前的 Cadena:33445511JMalloc2 之后的 Cadena: 33445511J//在 malloc 之后打印 persona->dni

Malloc 之前的 Cadena:Juanmalloc Juan 之后的 CadenaMalloc2 之前的 Cadena:92312321CMalloc2 之后的 Cadena:92312321C

Malloc 的 Cadena 底注:Pepe Maciasmalloc Pepe Macias 的 Cadena dpsMalloc2 的 Cadena 前注:39421294DMalloc2的Cadena解析:39421294D

Malloc 之前的 Cadena:Ignacio Gutierrez Povedillamalloc Ignacio Gutierrez Povedilla 之后的 CadenaMalloc2之前的Cadena:92123421Ymalloc():内存损坏Abortado(“核心”generado)

最佳答案

    c2 = malloc(strlen(buffer));
strcpy(c2, buffer);

c2 没有空间决赛\0 .

<小时/>

我希望bufferpersona不是函数的形式参数。如果是,

sizeof(buffer)

sizeof(persona)

返回肯定比你预期的少很多。

<小时/>

关于persona ,为什么要让它成为一个指针,而不是一个常规变量?! malloc() 应该只在没有其他机会的情况下使用,正是因为使用不当是危险的。

<小时/>

如果我找到更多,我会告诉你。

关于C RPC 服务器 malloc 内存损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56700355/

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