Programación General => C/C++ => C++ Builder => Mensaje iniciado por: joecarl en Sábado 20 de Noviembre de 2010, 22:51
Título: Invalid pointer operation
Publicado por: joecarl en Sábado 20 de Noviembre de 2010, 22:51
Cuando ejecuto el siguiente codigo no da error pero los resultados no son los esperados y cuando termina la aplicación sale una advertencia que dice "Invalid pointer operation" entre otras cosas.
Código: C++
char*dPath = SourceFile->FileName.c_str();
strcat(dPath,".ac3");
Quisiera saber qué es lo que está mal y por qué. Muchas gracias,
José Carlos.
Título: Re: Invalid pointer operation
Publicado por: Eternal Idol en Sábado 20 de Noviembre de 2010, 23:42
Si FileName es un std::string el metodo c_str no deberias trabajar con el buffer, por algo es const char * el tipo de retorno:
The returned array points to an internal location with the required storage space for this sequence of characters plus its terminating null-character, but the values in this array should not be modified in the program and are only granted to remain unchanged until the next call to a non-constant member function of the string object.
Título: Re: Invalid pointer operation
Publicado por: joecarl en Lunes 22 de Noviembre de 2010, 19:24
Muchas gracias por la respuesta; comprendido. Habia pensado en la alternativa que tu me muestras, pero por algún motivo tengo que hacerlo con variables de tipo char. Entonces si quiero hacerlo con variables de tipo char lo tendria que hacer así?
Código: C++
char*aux;
strcpy(aux, SourceFile->FileName.c_str());
strcat(dPath,".ac3");
¿O me sigo equivocando en algo?
Título: Re: Invalid pointer operation
Publicado por: m0skit0 en Lunes 22 de Noviembre de 2010, 20:04
No. Primero te refieres a char*, que no es char. Segundo, tienes que reservar la memoria necesaria para ello, es decir:
Ten en cuenta que char[] es lo mismo que char*. Ahí te cabrían como máximo 255 caracteres de ruta (+1 caracter nulo de terminación obligatorio). Eso sí, el espacio reservado siempre serán 256 bytes (chars), independientemente de si la ruta tiene 5 o 255 caracteres. Como optimización podrías primero comprobar la longitud de la ruta y luego reservar la memoria correspondiente (que es lo que se haría internamente con el ejemplo de Eternal Idol) usando malloc(), sólo que habría que estar al loro y liberarla una vez hayas acabado de usarla.
La mejor opción sin duda es la que te indica Eternal Idol, ya que es con C++ (que es lo que estás usando) y no C a pelo (que es como quieres hacerlo).
Saludos
Título: Re: Invalid pointer operation
Publicado por: joecarl en Lunes 22 de Noviembre de 2010, 20:46