*** Error in `./z': double free or corruption (fasttop): 0x0000000000749d10 *** [RESOLVIDO]

1. *** Error in `./z': double free or corruption (fasttop): 0x0000000000749d10 *** [RESOLVIDO]

josé fernando s. andarde
amdrade

(usa Ubuntu)

Enviado em 18/08/2013 - 01:17h

Olá, estava fazendo um script em C e deu *** Error in `./z': double free or corruption (fasttop): 0x0000000000749d10 ***
Alguém poderia me explicar o motivo ?

Usando os métodos:

int strnadd(char **out, size_t size_out, char *in, size_t size_in){
char *p;

if(!*out) {
size_out = 0;
*out = malloc(size_in+1);
if(!*out) {
return -1;
}
} else {
p = realloc(*out, size_out + size_in + 1);
if(!p) {
return -1;
}
*out = p;
}

memcpy( (*out + size_out), in, size_in );
*( *out + size_out + size_in )=0;

return size_out + size_in;
}

int stradd(char **out, size_t size_out, char *in) {
return strnadd(out, size_out, in, strlen(in));
}

Para criar um String dinâmica em um loop
...
while(i<N){
...
if(_nAchou > 0){
_nca++;
sprintf(p, "%d:%d",cadeia,_nAchou); //printf("%s\n", p);
str_size = stradd(&string, str_size, p);
str_size = stradd(&string, str_size, ",");

}
...
}

Ou se alguém tem uma outra forma de concatenar a String no loop.
Obrigado.




  


2. Re: *** Error in `./z': double free or corruption (fasttop): 0x0000000000749d10 *** [RESOLVIDO]

Paulo
paulo1205

(usa Ubuntu)

Enviado em 21/08/2013 - 22:40h

A mensagem de "diuble free" indica que você está tentando chamar a função free() (ou também realloc()) sobre um ponteiro que ou já foi liberado por uma chamada anterior à função ou não foi alocado dinamicamente.

O trecho de código que você postou não é suficiente para dizer onde o erro aconteceu e com qual variável. Você provavelmente vai querer executar o programa com a depuração ligada.


3. Re: *** Error in `./z': double free or corruption (fasttop): 0x0000000000749d10 *** [RESOLVIDO]

josé fernando s. andarde
amdrade

(usa Ubuntu)

Enviado em 30/08/2013 - 19:40h

paulo1205 escreveu:

A mensagem de "diuble free" indica que você está tentando chamar a função free() (ou também realloc()) sobre um ponteiro que ou já foi liberado por uma chamada anterior à função ou não foi alocado dinamicamente.

O trecho de código que você postou não é suficiente para dizer onde o erro aconteceu e com qual variável. Você provavelmente vai querer executar o programa com a depuração ligada.


Era isso mesmo, Valeu!!






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts