probleme glibc avec chaine de caracteres.
bonsoir,
Je me suis fait un code qui permet de concatener des chaine de caracteres.
Voici le code:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| char *str_concat(char *cs, ...) {
va_list va;
const char *ct;
char *s;
size_t size;
size = 1;
s = NULL;
va_start(va, cs);
while ((ct = va_arg(va, char *)) != NULL)
size += strlen(ct);
s = (char *) calloc(size * sizeof(char), sizeof(char));
if (s == NULL)
{
printf("in str_concat : malloc() failed.\n");
fflush(stdout);
}
else
{
va_start(va, cs);
strcpy(s, cs);
while ((ct = va_arg(va, char *)) != NULL)
strcat(s, ct);
}
return s;
} |
lorsque je l utilise je fais par exemple :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
|
void init_dir(char *rep_dir_path, list_t l)
{
int path_len;
char *path;
path_len = strlen(rep_dir_path);
mkdir(rep_dir_path, S_IRWXU);
path = str_concat(rep_dir_path, "/Divers", NULL);
mkdir(path, S_IRWXU);
while (fdt_list != NULL)
{
path = str_concat(rep_dir_path, "/", l->name, NULL);
mkdir(path, S_IRWXU);
l = l->next;
free(path);
}
} |
list_t est une liste de chaine de caracteres.
Ca me fait
Code:
1 2
| *** glibc detected *** free(): invalid next size (fast): 0x08053298 ***
Aborted |
Je ne comprend pas pourquoi .... Meme sans le free cela me fait une erreure qui est
Code:
1 2
| *** glibc detected *** malloc(): memory corruption: 0x08052cc8 ***
Aborted |
Merci