Kod powodujący błąd - tylko gdzie jest ten błąd

dział ogólny

Kod powodujący błąd - tylko gdzie jest ten błąd

Nowy postprzez Corvis » niedziela, 24 stycznia 2010, 19:10

Witam,

Mam następujący problem:

1 ) Deklaruje sobie mapę :

Kod: Zaznacz cały
private:
std::map<int,String> MapaJezykow;


2 ) Oraz funkcję z użyciem mapy

Kod: Zaznacz cały
String TFrmMain::OdczytajWartoscZmiennejJezykowej(int KodJezyka,int KodZmiennej)
{
   std::auto_ptr<TIniFile> Ini(new TIniFile(MapaJezykow[KodJezyka]));
   return Ini->ReadString("Main",String(KodZmiennej),"");
}




Kod się kompiluje, jednak kiedy wywołam tą funkcję ( błędu nie ma ) jednak przy zamknięciu programu mam Access.... i dokładnie :

Kod: Zaznacz cały
Pointer arithmetic in invalid memory in process: LpgTech.exe(1540)  - c:\program files\embarcadero\rad studio\7.0\include\dinkumware\xtree#160
  0x00000000+4.
    0x00407A43 - c:\program files\embarcadero\rad studio\7.0\include\dinkumware\xtree#160
    0x004066AB - c:\program files\embarcadero\rad studio\7.0\include\dinkumware\xtree#1231
    0x00406B3C - c:\program files\embarcadero\rad studio\7.0\include\dinkumware\xtree#1170
    0x004058E1 - c:\program files\embarcadero\rad studio\7.0\include\dinkumware\xtree#914
    0x004029CB - c:\program files\embarcadero\rad studio\7.0\include\../include/dinkumware/map#164
    0x004027E8 - FMain.cpp#23



Ma ktoś jakis pomysł o co może chodzić ?

Doszedłem narazie do tego, że chodzi o użycie mapy, jezeli wpisuję ścieżkę do INi ręcznie nic sie nie dzieje.
Pozdrawiam
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows VistaChrome

Re: Kod powodujący błąd - tylko gdzie jest ten błąd

Nowy postprzez Cyfrowy Baron » niedziela, 24 stycznia 2010, 20:47

U mnie działa to bez zarzutu, żadnych błędów.
Nie jest to związane z błędem, ale sugerowałby podawać do plików INI bezwzględną ścieżkę dostępu. U mnie program nie potrafił odnaleźć pliku, gdy podałem mu względna ścieżkę dostępu.

► Kod testowy 
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Kod powodujący błąd - tylko gdzie jest ten błąd

Nowy postprzez polymorphism » niedziela, 24 stycznia 2010, 22:47

Kod, który podałeś, wygląda OK, nie powinien sprawiać problemów. Jeśli użycie OdczytajWartoscZmiennejJezykowej uaktywnia błąd, to musi dziać się coś złego w kodzie, który ją wywołuje.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Kod powodujący błąd - tylko gdzie jest ten błąd

Nowy postprzez Corvis » niedziela, 24 stycznia 2010, 23:04

Nie jest to związane z błędem, ale sugerowałby podawać do plików INI bezwzględną ścieżkę dostępu


Mapa przechowuje ścieżki bezwględne.


Jeśli użycie OdczytajWartoscZmiennejJezykowej uaktywnia błąd, to musi dziać się coś złego w kodzie, który ją wywołuje.


O to kod który ją wywołuje :

Kod: Zaznacz cały
void TFrmMain::PokazOscyloskop() {
   pnlOscyloskop->Height = ClientHeight/3;
   pnlOscyloskop->Top = StatusBar1->Height + 10;
   WysunietyOscyloskop = true;
   pnlPokazUkryjOscyloskop->Caption =
      OdczytajWartoscZmiennejJezykowej(KodWybranegoJezyka,9003);
}


Sam już nie wiem o co chodzi :\
Spróbuje to jutro przekompilować na innym komputerze.


EDIT.

Właśnie odkryłem, że błąd jedynie pojawia się, jak wywoła się funkcja PokażOscyloskop. Jeżeli wywołam kod który go chowa błędu nie ma całość wygląda tak:

Jest to kod OnClick Panela
Kod: Zaznacz cały

static bool spr = false;
spr = !spr;     
if(spr == true) PokazOscyloskop();
else             UkryjOscyloskop();



A Funkcja ukryj wygląda tak:

Kod: Zaznacz cały
void TFrmMain::UkryjOscyloskop() {
   pnlOscyloskop->Height = 19;
   pnlOscyloskop->Top = StatusBar1->Height + 10;
   WysunietyOscyloskop = false;
   pnlPokazUkryjOscyloskop->Caption =
      OdczytajWartoscZmiennejJezykowej(KodWybranegoJezyka,9004);
}
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows VistaChrome

Re: Kod powodujący błąd - tylko gdzie jest ten błąd

Nowy postprzez Corvis » niedziela, 24 stycznia 2010, 23:15

Rozwiązałem zagadkę:


Funkcję pokaż oscyloskop użyłem w OnResize :

Kod: Zaznacz cały
void __fastcall TFrmMain::FormResize(TObject *Sender) {
   if(WysunietyOscyloskop==true) PokazOscyloskop();
}


Przerobiłem ją tak, żeby odczyt z mapy nie był robiony gdy OnResize ją wywołuje

Kod: Zaznacz cały
void __fastcall TFrmMain::FormResize(TObject *Sender) {
   if(WysunietyOscyloskop==true) PokazOscyloskop(false);
}


No i w ciele funkcji dodałem

Kod: Zaznacz cały
if(CzytajJezyk == true) {
      pnlPokazUkryjOscyloskop->Caption =
         OdczytajWartoscZmiennejJezykowej(KodWybranegoJezyka,9003);
   }



Teraz tylko czytam z mapy przy klikaniu w panel. Błąd zniknął. Ale dalej nie wiem czemu hehehe Ma ktoś może jakieś pomysły ??
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows VistaChrome


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 1 gość

cron