C/Visual C - Problema con punteros

 
Vista:

Problema con punteros

Publicado por Viktor (2 intervenciones) el 22/11/2012 16:43:40
Hola a todos,miren el siguiente problema que les voy a presentar me lo compila,pero funciona mal...al parecer el puntero se dispara para cualquier lado...trabajo sobre ubuntu...y me tira aborted (core dumped)...si me puede ayudar a encontrar los errores...que la verdad ya me he hecho un rollo en la cabeza.

Escribir un programa que realice la carga de un vector de enteros. Los datos
ingresan por stdin y se cargan en posiciones consecutivas del vector. El ingreso
de datos finaliza con un valor negativo, o al alcanzar 500 valores. Una vez
ingresados, se debe realizar dos listados: desde el 1er elemento al último, y
desde el último al 1ro.
Sugerencia: Usar redirección desde un archivo que contenga los valores, para probar el programa. Utilice el
comando more para regular la salida de su programa.
*/

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <stdio.h>
#include <stdlib.h>
#define N 10
 
int main()
{
	int *ptr,*fin,i=0;
	ptr=(int*)malloc(N*sizeof(int));
 
	if (ptr==NULL){
		fprintf (stderr,"no se puede alocar la memoria\n");
		fflush(stderr);
		exit(EXIT_FAILURE);}
 
	printf ("comienza la carga de datos\n");
	fin=ptr;
 
	//for(i=0;i<N && *(ptr+i)>=0;i++)
	//{
	//	scanf ("%d", *ptr+i);	
	//	
	//}
 
	do		//se ingresan los datos con las condiciones correspondientes
	{
		scanf ("%d", ptr+i);
		i++;
		fin++;
	}while(i<(N-1) && *(ptr+i)>=0);
 
	for(i=0;ptr<(fin-1);ptr++)
		printf ("%d\t", *ptr);
	for(i=0;fin>ptr;fin--)
		printf ("%d\t", *fin);
 
	free(ptr);
	fin=NULL;
	ptr=NULL;
 
	return(0);
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Problema con punteros

Publicado por Arturo (1 intervención) el 24/11/2012 02:40:02
Tu problema es debido a que estas perdiendo la direccion de memoria inicial de tu puntero, lo cual te genera un error al intentar liberar la memoria utilizada, ya que tu estas intentando liberar la ultima direccion lo cual te genera el error de memoria, es decir estas perdiendo la cabecera inicial a partir de aqui:

for(i=0;ptr<(fin-1);ptr++) //ptr++ como sabes mueve la direccion, por lo tanto pierde la inicial
printf ("%d\t", *ptr);
for(i=0;fin>ptr;fin--)
printf ("%d\t", *fin);
free(ptr);
fin=NULL;
ptr=NULL;

cambia todo eso por esto, esto hara que funcione, aunque nose exactamente si es lo que buscas, cualquier cosa me avisas
for(i=0;(ptr+i)<(fin-1);i++)//la manipulo con una variable mas no la cambio
printf ("%d\t", *(ptr+i));
for(i=0;fin>ptr;fin--)
printf ("%d\t", *fin);
fin=NULL;
free(ptr);


por cierto este codigo podria tener otros errores
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Problema con punteros

Publicado por Viktor (2 intervenciones) el 26/11/2012 01:54:49
gracias...lo voy a probar y te digo cualquier cosa :)

....el ejercicio consiste en ingresar 500 datos como maximo del tipo int a un array ... osea el ingreso de datos para a los 500 o cuando se ingresa un numero negativo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar