Portál AbcLinuxu, 16. května 2025 10:29
corrupted size vs. prev_sizeJedna sa o jednoduchy program. Vo vykonavai programi nepouzivam ani malloc/realloc. Iba signal() a kill(). Netusim, co moze byt zle. Prejavuje sa to raz zo 200 krat vykonavania programu.
char *strcat_malloc(char *s1, char *s2)a vysledna dlzka retazca je:
strlen(s1)+strlen(s2)a ja som dal:
strlen(s1)+strlen(s2)+1
const char *s1="a"; const char *s2="bc"; strlen(s1)+strlen(s2); // znamená: strlen(s1)==1, strlen(s2)==2, na reťazec "abc" potrebuješ alokovať 4 bajty char *result=malloc(strlen(s1)+strlen(s2)+1); // je 1+2+1=4 a to je správne strcpy(result,s1); strcat(result,s2);Ale keď, už raz valgrind na niečo ukáže, tak sa tam treba dobre poobzerať.
char *strcat_malloc(const char *first, const char *second) { long int l1; long int l2; long int lenght; char *ret; if(first == NULL || second == NULL) return NULL; l1=strlen(first); l2=strlen(second); lenght=l1+l2+1; ret=(char *) malloc(lenght); if(ret == NULL) return NULL; bzero(ret,lenght); memcpy(ret, first, l1); memcpy(ret+l1, second, l2); ret[l1+l2]='\0'; return ret; }
ret[l1+l2+1]='\0';ktory som opravil na
ret[l1+l2]='\0';Ak by som vobec nemal ten riadok, tak funkcia by fungovala spravne (alokovanu pamet nulujem, aj poziciu pre \0)
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.