[C con Clase] Reserva dinamica memoria

Ismael Camarero icamarero98 en hotmail.com
Jue Mar 22 18:53:22 CET 2007


Se trata de un programa que declara un puntero a int en la funcion 
principal, con el fin de simular un array. Se pide el numero de elementos q 
desea el usuario. Este numero y el puntero se lepasa a una funcion, para 
hacer la reserva dinamica de mem con malloc. Despues se pasa el puntero y el 
numero de elemntos a una fucnion para rellenar el array por teclado... y ahi 
surge el tipico problema de apuntamiento indebido. ?Por qué?

Este es el código (empleo Dev-C++:

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

void reserva(int *p, int );
void llenar(int *p, int);
void imprimir(int *, int);
int main()
{
    int n, *dat;
    puts("Cuantos elementos desea?\n");
    scanf("%d", &n);
    reserva(dat, n);
   // dat = (int *)malloc(n*sizeof(int));
    llenar(dat,n);
    imprimir(dat, n);



    getch();
    free(dat);
}

void reserva(int *dat, int n)
{

   dat = (int *)malloc(sizeof(int)*n);

}
void llenar(int *dat, int n)
{
    int i;
    printf("\nIntro valores para el array:\n");
    for(i=0; i<n;i++)
    {
      printf("\np[%d] = ", i);
      scanf("%d", (dat+i));
    }
}

void imprimir(int *dat, int n)
{
   int i;
   printf("\nLos valores del array son:\n");
    for(i=0; i<n;i++)
    {
      printf("\n*(dat+%d) = %d", i,*(dat+i) );

    }
}


si hagola reserva dinamica en mian(), no da problema.
¿ALguna razón?

Gracias.

_________________________________________________________________
Descubre la descarga digital con MSN Music. Más de un millón de canciones. 
http://music.msn.es/





Más información sobre la lista de distribución Cconclase