Hola !!
Estoy escribiendo un código que me permita introducir cadenas de caracteres en una estructura de forma dinámica. Para ello, utilizo punteros como campos de la estructura y luego guardo en ellos las direcciones de las tablas de caracteres creadas con calloc. En la estructura también guardo la longitud del campo.
Lo que hago es que si por ejemplo, introduzco un tamaño de 4 caracteres, le sumo uno para colocar el carácter '\0' de fin de cadena al final. Y mi problema es que si coloco un tamaño total de 7 caracteres e introduzco la cadena "Baloncesto" (10 caracteres), no me produce ningún error, y teóricamente estoy escribiendo en una dirección de memoria que no me pertenece (un Core Dumped o Fallo de Segmentación).
Lo he probado muchas veces (para quitar la opción de "te ha tocado la ejecución con más memoria disponible", o algo parecido).
¿Alguien puede ayudarme y decirme porque no me da error? Aquí dejo el código.
Código C:
Ver original#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// Definicion de la estructura
struct info {
int longitud;
char * nombre;
};
// Fin de la definicion
int main()
{
int tamanio;
struct info trama;
// Solicito la longitud de la cadena
scanf("%d", &trama.
longitud); printf("Longitud en la estructura: %d\n", trama.
longitud);
// Creo una tabla llamada nombre con el tamanio de esa longitud +1 por el \0
tamanio = ((trama.longitud)+1) * sizeof(char);
printf("tamanio: %d\n", tamanio
);
trama.
nombre = (char *) malloc(tamanio
);
if(trama.nombre != NULL)
{
// Coloco el '\0'
trama.nombre[tamanio] = '\0';
scanf("%s", trama.
nombre);
printf("\nMUESTRO EL NOMBRE INTRODUCIDO\n"); printf("Nombre: %s\n", trama.
nombre); printf ("Longitud del nombre: %d caracteres\n", strlen(trama.
nombre));
}
else
{
}
return 0;
}
Por si es necesario, decir que programo con GNU Emacs 23.1.1 en Ubuntu Lucid con arquitectura de 32 bits.
Muchas gracias,
gonzo.