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

Uso de memoria de CPU

Estas en el tema de Uso de memoria de CPU en el foro de C/C++ en Foros del Web. > Que tal, para el manejo de memoria se muy poco, en realidad aun no se nada, pero tengo un detalle, mis codigos los hago ...
  #1 (permalink)  
Antiguo 24/11/2006, 15:01
Avatar de BLEND  
Fecha de Ingreso: marzo-2006
Mensajes: 97
Antigüedad: 18 años, 1 mes
Puntos: 0
Uso de memoria de CPU

> Que tal, para el manejo de memoria se muy poco, en realidad aun no se nada, pero tengo un detalle, mis codigos los hago con DEV-C++ 4.9.9.2, pero no se que este haciendo mal, ya que he compilado mis codigos, pero despues de modificarlos y reconstriurlos, se traba un poco mi maquina, abro el Administrador de tareas y en la parte de rendimiento las barras de Uso de CPU estan al 100 %, a que se debe esto, estoy compilando y reconstruyendo mal ?, hasta ahora me ha sucedido al utilizar apuntadores, no reservo memoria para ellos, como me habian recomendado, puede ser eso ?. Tengo que terminar el proceso del DEV para que las barras regresen a un estado, que a mi parecer, es normal solo asi lo he solucionado.


Saludos...
  #2 (permalink)  
Antiguo 24/11/2006, 17:18
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 5 meses
Puntos: 52
Cita:
hasta ahora me ha sucedido al utilizar apuntadores, no reservo memoria para ellos, como me habian recomendado,
QUEE!!!????
Quien te recomendo que no reservaras memoria en los putneros??????????????

Si tu cpu se sobre carga por este programa es porque precisamente estas haciendo un terrible uso de punteros!!!.

Saludos
  #3 (permalink)  
Antiguo 24/11/2006, 17:23
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
Como te dice Instru, tu programa está francamente roto.

Por otra parte, no preguntes "¿por qué me falla esto?" sin decir qué es lo que te falla.

Empieza leyendo un tutorial sobre C, y déjate de intentar aprender a ciegas:

http://www.elrincondelc.com/cursoc/cursoc9.html
  #4 (permalink)  
Antiguo 24/11/2006, 17:26
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 5 meses
Puntos: 52
no se, pero en las FAQs mencione mucho el problema de no reservar memoria o reservarla incorrectamente. Podrias darle una leida.

Saludos
  #5 (permalink)  
Antiguo 25/11/2006, 17:19
Avatar de BLEND  
Fecha de Ingreso: marzo-2006
Mensajes: 97
Antigüedad: 18 años, 1 mes
Puntos: 0
Cita:
Iniciado por MaxExtreme Ver Mensaje
Como te dice Instru, tu programa está francamente roto.

Por otra parte, no preguntes "¿por qué me falla esto?" sin decir qué es lo que te falla.

Empieza leyendo un tutorial sobre C, y déjate de intentar aprender a ciegas:

http://www.elrincondelc.com/cursoc/cursoc9.html
No es que este queriendo aprender a ciegas MaxExtreme, el detalle es que aun no me lo han enseñado, solo nos decian que los punteros se deben inicializar, si no queremos causar problemas a nuestro PC, ya he leido las FAQ's sobre punteros, pero cinceramente no se como utilizarlo.

Pero entonces, por emjemplo, si quiciera un puntero a char, en el cual el char contiene 5 caracteres, incluyendo el nulo, aria algo asi:

Cita:
char cadena[5];
char *p;
p=cadena // Esto si iria o no ?
p=(char *)malloc(sizeof(char));
o sin importarme a que variable esta dirigida ? :


Cita:
char *p;
p=(char *)malloc(sizeof(char));
Les agradeceria, que me digan qe parte esta mal, o si de plano todo esta mal.
  #6 (permalink)  
Antiguo 25/11/2006, 17:20
Avatar de BLEND  
Fecha de Ingreso: marzo-2006
Mensajes: 97
Antigüedad: 18 años, 1 mes
Puntos: 0
Claro, tambien din olvidar el:

Cita:
free(p);
  #7 (permalink)  
Antiguo 25/11/2006, 21:04
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 5 meses
Puntos: 52
Estas un poco confundido, pero se notan las ganas de aprender.

char cadena[5];
char *p;
p=cadena // Esto si iria o no ?
p=(char *)malloc(sizeof(char));

Esto es incorrecto. porque primero, en las faqs yo menciono como un array como cadena[5] es lo mismo que un puntero tipo char con 6 localidades de memoria reservada.

entonces p=cadena lo unico que haria seria que p apunte justamente a cadena[0].
Si a p le umas 1 entonces aputnaria a cadena[1] y asi.
Incluso podrias usar p como array.
p[0]=algo;
que es igual que si pusieras
*p=algo de un byte(porque es char)

Pero si despues de p=cadena pones un malloc....imaginate que stas reservando memoria donde ya esta reservada...............

Lo ideal es lo que pusiste en la segunda cita.

char *p;
p=(char *)malloc(sizeof(char));

Con esto practicamente tienes un array de 1 elemento.

char *p;
p=(char *)malloc(sizeof(char)*5);

Con este lo tienes pero de 5 elementos.
Una vez hecho este malloc puedes usar p como si fuera un array:

p[0]=algo;
p[1]=algo;

Sòlo recuerda no pasarte de la memoria reservada porque si no tendrias problemas raros feos y bueno, dificiles de encontrar.

Te repito, en las faqs biene muy bien explicado el asunto de los errores con punteros.

Saludos
  #8 (permalink)  
Antiguo 26/11/2006, 03:00
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Cita:
Iniciado por Instru Ver Mensaje
Pero si despues de p=cadena pones un malloc....imaginate que stas reservando memoria donde ya esta reservada...............
Te digo lo mismo que le dijiste a BLEND: Estas un poco confundido, pero se notan las ganas de aprender.

Obviamente que ese codigo no tiene mucho sentido, o usas memoria dinamica o estatica pero tal como esta hecho p es una variable de tipo puntero a char totalmente independiente de cadena. Primero le es asignado el valor de cadena y despues el que devuelva malloc, no estas reservando NADA sobre memoria ya reservada ya que no esta asignandole ningun valor a *p sino a p.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #9 (permalink)  
Antiguo 26/11/2006, 03:10
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Un poco de codigo de demostracion:

Código:
#include <windows.h>
#include <stdio.h>

void main()
{
  char cadena[5] = "HOLA";
  char *p;
  p = cadena;
  printf("%s\r\n", cadena);

  //p tiene un nuevo valor, en nada afecta a cadena
  p = (char*)malloc(sizeof(char));
  free(p);
  printf("%s\r\n", cadena);

  p = cadena;
  //p modifica directamente cadena y veremos el ultimo printf como va
  (*(DWORD*)p) = (DWORD)malloc(sizeof(char));
  free((void*)(*(DWORD*)p));
  printf("%s\r\n", cadena);
}
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #10 (permalink)  
Antiguo 26/11/2006, 10:46
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
Cita:
Iniciado por BLEND Ver Mensaje
No es que este queriendo aprender a ciegas MaxExtreme, el detalle es que aun no me lo han enseñado, solo nos decian que los punteros se deben inicializar, si no queremos causar problemas a nuestro PC, ya he leido las FAQ's sobre punteros, pero cinceramente no se como utilizarlo.
Me estás dando la razón: Si no te lo han enseñado, coje ese tutorial de C y apréndelo que ahí vienen la respuesta.[/QUOTE]
  #11 (permalink)  
Antiguo 26/11/2006, 11:38
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 5 meses
Puntos: 52
Cita:
Obviamente que ese codigo no tiene mucho sentido, o usas memoria dinamica o estatica pero tal como esta hecho p es una variable de tipo puntero a char totalmente independiente de cadena. Primero le es asignado el valor de cadena y despues el que devuelva malloc, no estas reservando NADA sobre memoria ya reservada ya que no esta asignandole ningun valor a *p sino a p.
Tienes razon... No me habia fijado.
Gracias por la aclaracion
Saludos
  #12 (permalink)  
Antiguo 26/11/2006, 12:16
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Cita:
Iniciado por Instru Ver Mensaje
Tienes razon... No me habia fijado.
Gracias por la aclaracion
Saludos
De nadas
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #13 (permalink)  
Antiguo 26/11/2006, 14:04
Avatar de BLEND  
Fecha de Ingreso: marzo-2006
Mensajes: 97
Antigüedad: 18 años, 1 mes
Puntos: 0
Muchas gracias a todos, creo que ahora si comprendo mejor el uso de malloc/free, y ya note la diferencia entre usar memoria estatica y dinamica.

Ya revise la liga del tutorial que me mandsate MaxExtreme, y tambien me aclaro algunas dudas, gracias de nuevo.
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 07:18.