• Jueves 14 de Noviembre de 2024, 03:53

Autor Tema:  Invalid pointer operation  (Leído 2218 veces)

joecarl

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Invalid pointer operation
« en: Sábado 20 de Noviembre de 2010, 22:51 »
0
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++
  1.  
  2. char *dPath = SourceFile->FileName.c_str();
  3. strcat(dPath,".ac3");
  4.  
  5.  
Quisiera saber qué es lo que está mal y por qué.
Muchas gracias,

José Carlos.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Invalid pointer operation
« Respuesta #1 en: Sábado 20 de Noviembre de 2010, 23:42 »
0
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.

http://www.cplusplus.com/reference/string/string/c_str/

Mejor asi:
Código: C++
  1. SourceFile->FileName += ".ac3";
  2.  

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

joecarl

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: Invalid pointer operation
« Respuesta #2 en: Lunes 22 de Noviembre de 2010, 19:24 »
0
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++
  1.  
  2. char *aux;
  3. strcpy(aux, SourceFile->FileName.c_str());
  4. strcat(dPath,".ac3");
  5.  
  6.  

¿O me sigo equivocando en algo?

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Invalid pointer operation
« Respuesta #3 en: Lunes 22 de Noviembre de 2010, 20:04 »
0
No. Primero te refieres a char*, que no es char. Segundo, tienes que reservar la memoria necesaria para ello, es decir:

Código: C
  1. char aux[256];
  2. strcpy(aux, SourceFile->FileName.c_str());
  3. strcat(dPath,".ac3");
  4.  
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

joecarl

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: Invalid pointer operation
« Respuesta #4 en: Lunes 22 de Noviembre de 2010, 20:46 »
0
Ok muchas gracias de verdad. Me ha quedado claro