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

[SOLUCIONADO] uso de memoria dinamica para un noob o sea yo :D

Estas en el tema de uso de memoria dinamica para un noob o sea yo :D en el foro de C/C++ en Foros del Web. hola como les va? tanto tiempo :D , bueno fuera de nostalgias mi pregunta es la siguente. Estoy empezando a leer sobre memoria dinamica en ...
  #1 (permalink)  
Antiguo 24/06/2016, 13:01
 
Fecha de Ingreso: octubre-2015
Mensajes: 17
Antigüedad: 9 años, 2 meses
Puntos: 0
uso de memoria dinamica para un noob o sea yo :D

hola como les va? tanto tiempo :D , bueno fuera de nostalgias mi pregunta es la siguente.
Estoy empezando a leer sobre memoria dinamica en C pero la duda ea que si yo creeo un array de 20 caracteres pasados por puntero a la funcion malloc si sobrepaso esos caracteres el programa me muestra la basurilla que tienen las demas casillas .
para ser mas claro si la variable tiene 20 caractres malloc solo es dinamica en esos 20 caracteres o no? pongo ejemplo de mi duda

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(){ // Nivel 8 ej 1

char *p_md;
char nombre[20];
int longitud;

strcpy(nombre , "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" );

longitud = strlen(nombre);

p_md = malloc((longitud + 1 )*sizeof(char));

strcpy(p_md , nombre);

printf("%s", p_md);

return 0;
}

desde ya gracias :)
  #2 (permalink)  
Antiguo 25/06/2016, 04:38
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 14 años, 2 meses
Puntos: 10
Respuesta: uso de memoria dinamica para un noob o sea yo :D

Bueno, edito la respuesta:

Tal como planteas la función strcpy, estás copiando más elementos que la capacidad del array, que es de 20 char.

O sea, que aquí se podría producir el primer error. Eso lo puedes solucionar con la función strncpy, que te limita el nº de elementos a copiar.
Código C++:
Ver original
  1. #define TAM 20
  2.  
  3. int main()  // Nivel 8 ej 1
  4. {
  5.     char *p_md;
  6.     char nombre[TAM];
  7.     int longitud;
  8.  
  9.     strncpy(nombre, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", TAM);

El otro error que podrías provocar es este:
Código C++:
Ver original
  1. #define TAM 20
  2.  
  3. int main()  // Nivel 8 ej 1
  4. {
  5.     char *p_md;
  6.     char* cadena= "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
  7.  
  8.     p_md = (char*)malloc(TAM*sizeof(char));
  9.  
  10.     //p_md = &nombre[0];
  11.     strcpy(p_md , cadena);
  12.  
  13.     printf("%s", p_md);

En el que asignas menos memoria de la necesaria para copiar "cadena".
En todo caso, estos errores significan que accedes o pisas memoria que no has reservado previamente, por lo que puede ser que estés accediendo/modificando memoria de otros programas o partes de tu programa con consecuencias indefinidas o desastrosas.
El hecho de que a veces "cuele"...es decir, que la memoria contigua a la que tenías esté sin uso, y por tanto aparentemente está todo bien no quiere decir que no hay error.
__________________
Mi calculadora en Qt

Última edición por dehm; 25/06/2016 a las 05:00

Etiquetas: char, dinamica, int, memoria, noob, programa, variable
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 08:14.