Hasta los .... de los punteros de FreePascal

Aziwar

Buenas! Resulta que...ME TIENEN HARTO LOS PUNTEROS xDDD hacen lo que le da la gana :S

Si tengo esta estructura

Type
puntero = datosadyacencia;
datosadyacencia = record
nodo : integer;
peso : real;
enlace : puntero;
end;

adyacencia = array[1..maxvertices] of puntero;

Var
lista : adyacencia;
i : integer;
p : puntero;

Se supone que yo puedo hacer lista := p no? ya que ambos apuntan a lo mismo. Uno es un array de puntero y el otro un puntero independiente pero apuntan a lo mismo.

Pos no me da runtime el programa :S Sin embargo si en vez de eso lo que hago es copiar el contenido (que se supone que es lo mismo) asi new(lista); lista^ := p; si me deja.

Pero de este modo no lo puedo hacer ya que es para hacer la lista de adyacencia de un grafo, y desde que un elemento tenga más de 2 adyacentes se me sobreescribe el último por el new. Y la profesora no me deja hacerlo utilizando la matriz de adyacencia, tiene que ser con esa estructura (array de punteros, en los que en cada casilla se almacenan los adyacentes al nº de la casilla).

Alguien tiene idea de porque da el runtime en lista := p ??

Ese trozo del codigo seria en cuestion este

spoiler
bLaKnI

No puedo ayudarte pero, tengo curiosidad por saber el ¿porque programas en FreePascal?

Aziwar

preguntale a la universidad pq se empeñan en la mierda de pascal xD cuando hasta los mismos profesores te dicen que no sirve para nada

m0rG

Pascal se diseñó para enseñar a progrmar,de ahí que en muchas universidades se enseñe como primer lenguaje de programación.Es un lenguaje bastante sencillo y claro por lo que es ideal para enseñar los conceptos básicos de la programación (estructuras de control,estructuras de datos y esas cosillas).En el ámbito profesional sí que es cierto que no sirve para nada (más que nada por que hay muchos más lenguajes más modernos o evolucionados) pero ya tendrás tiempo a lo largo de la carrera de ver otras cosas (dicen que si aprendes a programar bien,un lenguaje nuevo se aprende en unos días :P).

Bueno al tema xD.Yo hace mucho que no toco Pascal y puede que esté equivocado pero en tu programa veo algo raro.Utilizas la variable p (de tipo puntero) digamos como un puntero auxiliar para ir reservando memoria en cada iteración e inicializar la estructura de datos a la que apunta (con la información de una tabla creada anteriormente parece).Tras realizar todo este proceso y asignar p a lista (que no debería dar error) terminas el bucle liberando la memoria a la que apunta p y por consiguiente lista.Es decir que te cargas la estructura que acabas de crear y lista apunta a algo que no existe si es que apunta a algo.Si en la siguiente iteración accedes a la misma posición de lista para añadir un nuevo enlace dará error sin duda (estás haciendo referencia a una variable que no existe usando un puntero que no apunta a nada).

Prueba a quitar ese dispose(p) del final del bucle en resumen.También asegúrate de que no te estás saliendo de las tablas que usas,que es otro de los errores típicos.La asignación que dices tú es correcta y no creo que sea la causa del error.Si lo fuera seguramente Free Pascal daría un error de compilación y no de ejecución ;).

Poisonous

La asignacion es correcta, el problema esta en otra parte.

PD Dale recuerdos a Cande ;)

Aziwar

ya lo abia arreglado, efectivamente era eso m0rg. yo estaba contando con ke al guardarlo en el array ya lo podia borrar pero despues cai en ke no xDD

poi q estudiaste ai? xDD

ahora lo k estoy liado es en como hacer el recorrido en profundidad y de amplitud, en papel se perfecto pero en programa ni idea xD

D4rKNiGhT

Para mi pascal es una mierda, he entendido mil veces mejor en 2 meses algo de java que pascal en un año.

LOc0

#6
http://www.algoritmia.net/articles.php?id=18 (Es en C, pero convertirlo a Pascal está tirado).

Salu2 ;)

Aziwar

Me podeis traducir estos 2 códigos a freepascal? no entiendo C :S

spoiler
spoiler

Usuarios habituales

  • Aziwar
  • LOc0
  • D4rKNiGhT
  • Poisonous
  • m0rG
  • bLaKnI