A que se debe el malloc corruption

Hola, soy nuevo en este foro, me gustaría saber cual es el motivo por el cual sale este maldito error.. :D

A que se debe el malloc corruption. El doble free yo sé que es tratar de liberar espacio no reservado, pero este no sé.

Estoy haciendo una aplicacion, que de lee comandos de un shell,
recibo un char *cmdline, y un int *argc y retorno un char ** argv.

char **getArgv(char *cmdline, int *argc){

____char **argv = NULL;
____char *arg = NULL;
____int arg_ini = 0;
____int arg_fin = -1;
____int arg_indx = 0;
____int offset = 0;

____while( arg_ini = encontrarIni(cmdline, arg_fin + 1), arg_ini >= 0 ) {
________offset = getCmdArg(cmdline + arg_ini);
________arg_fin = arg_ini + offset;
________cmdline[arg_fin - 1] = '\0';

________(*argc)++;
________/*
________ * Si no se ha insertado aun ningun argumento, crear el arreglo de
________ * argumentos. Sino redimensionar para que quepa un elemento mas.
________ */
________if(argv == NULL){
____________/*MUERE EN LA LINEA DE ABAJO =(*/
____________argv = (char**) malloc( sizeof(char*) );
________} else {
____________argv = (char**) realloc(argv, (*argc)*sizeof(char*));
________}

________/*
________* Reservar espacio para el argumento y guardar.
________*/
________arg = argv[arg_indx++] = (char*) malloc( offset*sizeof( char ) );
________bcopy( arg, (cmdline+arg_ini), offset );
____}

____return argv;
}

Alguien sabe que puede ser, y por cierto, ninguna funcion modifica argv, argv tampoco es global y es el primer y unico malloc que hago..

Saludos y gracias
Para utilizar malloc que libreria incluyes, malloc.h o stdlib.h ???

Pueba si lo haces con una prueba con la otra a ver si te sigue dando el mismo error...

La verdad es que nunca lo había visto :S

Un saludo!
Parece ser que tienes la memoria corrupta, y me jugaria una uña a que el problema esta en otro sitio.
Yo veo el codigo correcto, lo normal es que cuando se corrompe la memoria, el error no lo de en el momento de corromperse, sino que en cualquier sitio posterior.
Si es esto, que Dios te coja confesado, pues es dificil de detectar.
En los casos mas dificiles, yo lo que hago es(despues de haber verificado todo, pasado un debugger......)
...La soluccion final...... Buscar una linea que provoque el error e irla adelantando en el codigo hasta que no petara. Y entonces,con suerte, alli estaba el error.
cosas como variable[noseque1+noseque2-noseque3......] suelen tener mucha culpa.
Tambien los strcpy,memcpy,bcopy.... suelen tener culpa
Saludos y suerte
Ya encontré el error, el man de la funcion getpass me jodio...
Decía que la posicion de memoria que devuelves es una posicion de memoria estatica e interna, pero al liberar esa posicion desaparecio el error..
3 respuestas