Reklama
Pokazuje wyniki od 1 do 3 z 3

Temat: [Delphi] lista jednokierunkowa

  1. #1

    Data rejestracji
    2010
    Położenie
    Aͦͯ͐̾͐ͦ̋̽́̎̀͗̌͡͏̸&#7
    Posty
    2,138
    Siła reputacji
    17

    Domyślny [Delphi] lista jednokierunkowa

    już szlag mnie trafia, nie wiem o co chodzi, przepisałem z innego mojego programu który działał normalnie, jedyna różnica jest taka, że tutaj procedura jest w bibliotece, ale nie mam pojęcia w jaki sposób może to wpływać na jej działanie. chodzi konkretnie o usuwanie elementu, tutaj kod, zapisany tak łopatologicznie jak tylko się da żeby łatwiej było wam znaleźć ewentualny błąd:
    w bibliotece:
    Kod :
    procedure usun(var root: lista; prejestracja: string); stdcall;
    var
      temp, usuwany: lista;
    begin
      if(root^.rejestracja = prejestracja) then begin
        usuwany := root;
        if(root^.next <> nil) then begin
          root := root^.next;
        end;
        dispose(usuwany);
      exit;
      end;
      temp := root;
      while(temp^.next^.rejestracja <> prejestracja) do begin
        temp := temp^.next;
      end;
      usuwany := temp^.next;
      if(usuwany^.next <> nil) then begin
        temp^.next := usuwany^.next;
      end else begin
        temp^.next := nil;
      end;
      dispose(usuwany);
    end;
    szuka wpisu z rejestracją podaną jako argument i go usuwa, na 3 różnie sposoby, w zależności od tego czy jest to 1. element, ostatni czy jakiś w środku. oczywiście w bibliotece pod koniec:
    Kod :
    exports
      (...)
      usun index 2,
      (...)
    w programie głównym:

    Kod :
    procedure TForm1.Button3Click(Sender: TObject);
    var
      lib: HModule;
      usun: procedure(var root: lista; prejestracja: string);stdcall;
    begin
      lib := LoadLibrary('Project1.dll');
      usun := GetProcAddress(lib, PChar(2));
      usun(root, ListBox1.Items.Strings[ListBox1.ItemIndex]);
      wypisz();
    end;
    i najdziwniejsze jest to że to działa, lista jest wypisywana do listboksów, usuwany jest zaznaczony element, jak odświeżę listboksa to usunięty element znika, w trakcie działania programu wszystko działa jak powinno, ale po zamknięciu jest coś takiego:

    jeśli uruchomię program poza środowiskiem to po zamknięciu i odczekaniu chwili:

    jeśli w programie tylko dodaję elementy do listy albo nic nie robię i od razu go zamknę - wszystko jest ok.
    pomocy!

  2. #2

    Data rejestracji
    2005
    Posty
    257
    Siła reputacji
    20

    Domyślny

    Może zapytaj na StackOverflow.com? Prawdopodobnie zwolniłeś jakiś wskaźnik dwa razy albo próbujesz odczytać pamięć w miejscu, które już zwolniłeś.

  3. #3

    Data rejestracji
    2010
    Położenie
    Aͦͯ͐̾͐ͦ̋̽́̎̀͗̌͡͏̸&#7
    Posty
    2,138
    Siła reputacji
    17

    Domyślny

    możliwe, dzięki za pomoc ale program musiałem oddać w poniedziałek ;d zamieniłem dispose(x) powodujący błąd na x := nil i działało tak jak chciałem, 5.0 jest ;P

  4. Reklama
Reklama

Informacje o temacie

Użytkownicy przeglądający temat

Aktualnie 1 użytkowników przegląda ten temat. (0 użytkowników i 1 gości)

Podobne tematy

  1. Odpowiedzi: 3
    Ostatni post: 22-05-2014, 22:48
  2. [Delphi 7] pomoc z podstawami
    Przez Perkun w dziale Programowanie
    Odpowiedzi: 9
    Ostatni post: 15-10-2013, 16:30
  3. [Delphi 7] Potrzebna pomoc w pobieraniu wartości..
    Przez Zaster w dziale Sprzęt i oprogramowanie
    Odpowiedzi: 2
    Ostatni post: 29-05-2013, 16:05
  4. C++ Delphi Java PHP
    Przez dima0909x w dziale Programowanie
    Odpowiedzi: 44
    Ostatni post: 18-01-2013, 11:41
  5. Program Baza danych Delphi - pomoc
    Przez Bazan w dziale Programowanie
    Odpowiedzi: 0
    Ostatni post: 08-01-2013, 17:16

Zakładki

Zakładki

Zasady postowania

  • Nie możesz pisać nowych tematów
  • Nie możesz pisać postów
  • Nie możesz używać załączników
  • Nie możesz edytować swoich postów
  •