Foros del Web » Programación para mayores de 30 ;) » C/C++ »

strcat(char*,char*) crash!

Estas en el tema de strcat(char*,char*) crash! en el foro de C/C++ en Foros del Web. Buenas! ¿Alguien sabe por qué este strcat produce un crash? Código: char* glsl_source; char* vsdefine = "#define COMPILING_VS\n"; ifstream in(filename, ios::binary); in.seekg(0 , std::ios::end); fsize ...
  #1 (permalink)  
Antiguo 12/10/2012, 07:25
 
Fecha de Ingreso: septiembre-2012
Mensajes: 38
Antigüedad: 11 años, 8 meses
Puntos: 0
strcat(char*,char*) crash!

Buenas!
¿Alguien sabe por qué este strcat produce un crash?

Código:
char* glsl_source;
char* vsdefine = "#define COMPILING_VS\n";

ifstream in(filename, ios::binary);
in.seekg(0 , std::ios::end);
fsize = in.tellg();
in.seekg(0 , std::ios::beg);
glsl_source = new char[fsize + 1];
in.read(glsl_source,fsize);
in.close();

strcat(fsdefine, glsl_source);   //crash en este punto
  #2 (permalink)  
Antiguo 12/10/2012, 07:53
 
Fecha de Ingreso: junio-2010
Ubicación: Madrid
Mensajes: 620
Antigüedad: 13 años, 10 meses
Puntos: 73
Respuesta: strcat(char*,char*) crash!

¿El empleo de fsdefine en strcat es correcto, o es un error mecanográfico y debería ser vsdefine?

Si es correcto, habría que ver dónde se declara fsdefine y qué uso de hace de él antes de llegar a esta porción de código.

Si es un error mecanográfico, la línea correcta sería

srcat(vsdefine, glsl_source);

En tal caso, resulta que vsdefine ha sido declarado como un puntero que apunta a la cadena fija "#define COMPILING_VS\n". Al hacer el strcat, le estás añadiendo más cosas, pero ya en una zona de memoria que no pertenece a vsdefine. En resumen, estás sobreescribiendo encima de otras cosas, y no sabes qué, dónde ni cómo estás haciéndolo. En C no hay comprobación de los límites de los arreglos, eso es algo que corre por cuenta del programador. Y en este caso, aunque sea código C++, estás manejando cadenas al estilo C. La solución, en principio, es dimensionar vsdefine con un tamaño suficiente para que pueda guardar lo que le pidas.

Saludos,
  #3 (permalink)  
Antiguo 13/10/2012, 15:08
 
Fecha de Ingreso: septiembre-2012
Mensajes: 38
Antigüedad: 11 años, 8 meses
Puntos: 0
Respuesta: strcat(char*,char*) crash!

Siento lo de vsdefine, fue un error ortográfico mio. Lo que intentaba hacer era concatenar las dos cadenas.
  #4 (permalink)  
Antiguo 15/10/2012, 01:01
 
Fecha de Ingreso: junio-2010
Ubicación: Madrid
Mensajes: 620
Antigüedad: 13 años, 10 meses
Puntos: 73
Respuesta: strcat(char*,char*) crash!

Entonces, estamos en la segunda parte de mi post anterior. Ahí está explicado por qué sucede, y sugiere una solución.

Saludos,
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:03.