/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

Ayuda para comprender error en programa.

 
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
dgs3333



Registrado: 23 Nov 2012
Mensajes: 7
Ubicación: Benidorm

MensajePublicado: 06/04/2014 4:33 am
Título: Ayuda para comprender error en programa.

Hola,

Estoy aprendiendo a programar en C y me he quedado un poco atascado con un ejercicio. No entiendo porque el programa que pongo a continuación produce un error durante su ejecución.

#include <stdio.h>
#include <stdlib.h>
void asigmem(int *p, int t);

main()
{
int *p = NULL;
asigmem(p, 3);
p[0] = 10, p[1] = 20, p[2] = 30;
printf("%d\n"), p[1];
}

void asigmem(int *p, int t)
{
p = (int *)malloc(t * sizeof(int));
}

¿Alguien que lo entienda me lo podría explicar?
Un saludo.
Volver arriba
rir3760



Registrado: 01 Oct 2004
Mensajes: 7516
Ubicación: Mexico

MensajePublicado: 06/04/2014 5:35 am
Título:

El error se genera porque en C todo se pasa por valor, si quieres emular el paso por referencia debes pasar la dirección de la variable (mediante el operador "&") y aplicar indireccion (mediante el operador "*") en la función.

En tu caso ya que la variable a modificar ("p" de main) es de tipo "int *" el parámetro de la función "asigmem" debe ser "int **p".

Ademas hay que cambiar la llamada a printf porque el paréntesis de cierre esta mal colocado. Con ese y otros cambios menores:
Código:
#include <stdio.h>
#include <stdlib.h>

void asigmem(int **p, int t);

int main(void)
{
   int *p;
   
   asigmem(&p, 3);
   p[0] = 10, p[1] = 20, p[2] = 30;
   printf("%d\n", p[1]);
   
   return 0;
}

void asigmem(int **p, int t)
{
   *p = malloc(t * sizeof(int));
}


Un saludo
_________________
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
Volver arriba
dgs3333



Registrado: 23 Nov 2012
Mensajes: 7
Ubicación: Benidorm

MensajePublicado: 06/04/2014 9:51 am
Título:

Muchas gracias por tu ayuda. Ahora ya lo veo más claro, pero menudos líos me estoy montando con el tema de punteros. Cada vez que me parece que lo he entendido, aparece algún detalle que me vuelve a liar. A ver si se me va quedando poco a poco de ir practicando con ellos.

Un saludo.
Volver arriba
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com