[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