Co jest przyczyną błędu 62097 w Qt?

0

Witam

Chciałbym się zapytać skąd się bierze ten kod błędu. Pojawi się zwykle po poprawnym skompilowaniu, program się uruchamia, ale zawiesza. Trochę już poczytałem na ten temat, ale żadna odpowiedź nie była konkretna. Raz ktoś pisał, że problemem mogą być zbędne nagłówki, za drugim razem wyczytałem, że to błąd spowodowany nie zniszczonym obiektem dziecko. I posłużyć się należy klasą QProcessPrivate i funkcja kill nie za bardzo wiem jak jej użyć bo nie wiem co killować :) .
U mnie błąd zlikwidowałem robiąc porządek przy tworzeniu obiektów dynamicznie tzn
obiekt ** wskaznik = new obiekt*[jakasliczba]
Program się sypał jak obiekty te były tworzone z marszu w byle jakim momencie programu w różnych funkcjach. Zauważyłem również, że wyskakujące okna zamykane funkcja close() także powodowały ten błąd, gdy do tego celu zacząłem używać destruktora this->~destruktor()
błąd również zniknął. Pomaga też wyczyszczenie projektu.
Czy ktoś potrafi sprecyzować z czego konkretnie błąd powstaje bo na razie to nie wiem z jakiej armaty w to walić.

1

Straszny bełkot, z którego niewiele wynika.
Na dodatek jeśli piszesz o tym, że jawnie wywołujesz destruktor znaczy, że sam robisz coś totalnie źle. Jawne wywoływanie destruktora jest dla profesjonalistów C++ i jest konieczne jedynie, gdy samodzielnie się zarządza ALOKACJĄ pamięci (gdy dostarcza się własnego allocatora), przykład widać wewnątrz np QVector albo std::vectror (kontener ten sam zarządza jednym spójnym kawałkiem pamięci, więc podczas niektórych operacji wywołuje jawnie destruktor zarządzanych obiektów).
Wygląda na to, że nadal nie umiesz zarządzać pamięcią (problem z poziomem wiedzy z C++, a nie z Qt).

Dodatkowo próba dłubania w klasach prywatnych zawsze prowadzi do dużych problemów (to może powodować problemy zwłaszcza z kompatybilnością). Zaczynasz zabawę z Qt, z C++ masz nadal kłopoty, zapomnij o dłubaniu w bebechach Qt, tylko stracisz nerwy.

Jeśli zadajesz pytania to bądź konkretny, najlepiej pokazuj spory kawałek własnego kodu, wtedy łatwo będzie wskazać błędy jakie robisz, zresztą dowód na to masz tutaj, najpierw długa bezowocna wymiana postów, podałeś kod i od razu wiadomo było w czym problem.

0

Zastosuje się do powyższych wskazówek.
Zatem, będąc konkretnym. Czym może być spowodowany błąd określający się pod kodem 62097 ? Gdzie szukać przyczyny?

1

60297 wygląda na przypadkowy numer. Uruchom swój program w debugerze (z Qt Creatora za pomocą zielonej strzałki z robalem). Jeśli program masz zbudowany w trybie debug, w momencie błędu zobaczysz "call stack" czyli ciąg wywołań funkcji, które doprowadziły do błędu.
Zgaduje, że błąd twój to tak naprawdę segmentation fault spowodowany dostępem do zwolnionej pamięci.
Tak jak pisałem skoro wywołujesz ręcznie destruktor to robisz coś totalnie źle.

0

Program uruchamia się normalnie, bez tytułowego błędu nic się nie zawiesza, a debuger pokazuje już błąd w 8 lini Deassemblera.
0x100127e3 <0+x0000> cmpw $0x5a4d, (%esi)

W Oknie z zakładką STOS mam:
Poziom: 0 ; Funkcja: ?? ; Plik: C:\Windows\system32\guard32.dll ; Linia: 0

Komunikat

Segmentation fault(sygnal SIGSEGV)

Czyli się nie myliłeś. Spróbowałem także stworzyć nowy projekt, który składa się tylko z samego okna QMainWindow oraz jednego przycisku QPushButton i błąd wyskakuje ten sam. Jeśli pamięć została zwolniona to dlaczego debuger uznaje to za błąd ? Jak ten błąd zlikwidować?
0

No czyli miałem rację, że to jest błąd dostępu do pamięci: "Segmentation fault(sygnal SIGSEGV)".
"Call stack" ("stos") powinien ci jednak pokazywać więcej niż jedną linijkę. Każda z tych linijek wskazuje na inny kod i na 99% co najmniej jedna lirnika będzie wskazywać na twój kod (niestary zdarzają się przypadki kiedy problem manifestuje się w zupełnie niepowiązanym miejscu). Ty najwyraźniej zwróciłeś uwagę jedynie na szczyt stosu.

0

No tak tylko dlaczego identyczny błąd występuje w całkowicie nowym projekcie? Zamieszczam zrzut z ekranu tego debuga.

0

Klika prób w różnych wariantach:

  1. Całkowicie nowy, pusty, łysy projekt QT Widget, identyczy błąd
  2. Z jednym QPushButton, ale dodany za pomoca QT Desingera
  3. Nowy pusty, wywalona klasa ui, zostawione tylko main.cpp, mianwidow.cpp, mainwindow.h konstruktor wyczyszczony. Program w ten sposób działa, ale błąd jak powyżej.

Qt Creator 2.4.1
Based on Qt 4.7.4 (32 bit), ale... **
Z poprawki 8cd370e163
QT SDK 1.2.1
Windows 7 32 bit

**Debug pracuje na QT Sources 4.8.1 (MinGW SDK). To jest wersja o którą zostało rozszerzone SDK poprzez MainTain QT SDK. Taką wybrałem podczas batalii z zainstalowaniem sterowników do MySQL.

1 użytkowników online, w tym zalogowanych: 0, gości: 1