problem rozwioazany, dzeiki
jak to naprawic ?
problem rozwioazany, dzeiki
jak to naprawic ?
Sory, ale nie pomogę, bo zapomniałem dziś mojej magicznej kuli. Z tego wielkiego fragmentu kodu i olbrzymiej ilości informacji jakie dałeś, trochę ciężko coś wywnioskować. Możesz po prostu i albo j dawać za duże i wychodzić poza zakres.
Ja strzelam, że i oraz j mają złę wartości i wychodzisz poza zakres tablicy.
Popraw tak (tak będzie bardziej poprawnie):
void MainWindow::zmiana()
{
if (QPushButton* button = qobject_cast<QPushButton*>(sender()))
button->setText(QString('X'));
}
jeśli 'i' oraz 'j' są polami klasy to po wykonaniu się pierwszych pętli będą one przechowywały wartości wykraczające poza wielkość tablicy. Odwoływanie się w ten sposób w slocie może być niebezpieczne bo ciężej jest kontrolować wartości tych pól. Nie lepiej przekazywać je przez argumenty lub nawet przekazać przez argument sam wskaźnik na button?
albo tak jak wyżej kolega pisał - czego nie przeczytałem wcześniej :) W sumie to nawet ładniejsze rozwiązanie.
dzieki
ale jaja ;)
na moje oko tu jest wszystko ok
moze sie jeszcze ktos wypowie, ja nie wiem
wrzuć gdzieś projekt i go udostępnij bo tak do niczego nie dojdziemy :]
poza tym tworzenie QPushButton'ów możesz wywołać w pętli nadrzędnej do tej co wywołujesz connect (przez co pozbywasz się jednej pętli).
trzeba bylo zmienic
connect(tab[i][j],SIGNAL(clicked()), this, SLOT(close()));
na
connect(&tab[i][j],SIGNAL(clicked()), this, SLOT(close()));
myslalem ze to przejdzie domyslnie i pozniej nie zauwyzelem, dlaczego koniecznie adres tego ?
bo przechowujesz obiekty statycznie utworzone czyli musisz przekazać ich adresy. Na przyszłość wrzuć jeszcze deklarację klasy, bo z tego kodu co prawda można było to wywnioskować ale łatwiej byłoby z deklaracji klasy gdyby było widać co przechowuje dokładnie ta tablica (wskaźniki (QPushButton*) czy same obiekty (QPushButton) )
czyli mozna powiedziec, ze prawie skonczylem ,co mialem zrobic, nie liczac wyciekow pamieci po wylaczeniu aplikacji
*** glibc detected *** ./PROJEKT: munmap_chunk(): invalid pointer: 0x09f5441c ***
======= Backtrace: =========
/lib/tls/i686/cmov/libc.so.6(+0x6b591)[0x1b3591]
/lib/tls/i686/cmov/libc.so.6(+0x6c80e)[0x1b480e]
/usr/lib/libstdc++.so.6(_ZdlPv+0x21)[0x45c741]
/usr/lib/libQtGui.so.4(_ZN11QPushButtonD0Ev+0x3d)[0x117b89d]
./PROJEKT[0x804ae7f]
./PROJEKT[0x804ab9c]
/lib/tls/i686/cmov/libc.so.6(__libc_start_main+0xe6)[0x15ebd6]
./PROJEKT[0x804aa91]
======= Memory map: ========
00110000-00125000 r-xp 00000000 08:03 1000571 /lib/tls/i686/cmov/libpthread-2.11.1.so
00125000-00126000 r--p 00014000 08:03 1000571 /lib/tls/i686/cmov/libpthread-2.11.1.so
00126000-00127000 rw-p 00015000 08:03 1000571 /lib/tls/i686/cmov/libpthread-2.11.1.so
00127000-00129000 rw-p 00000000 00:00 0
00129000-00146000 r-xp 00000000 08:03 108017 /lib/libgcc_s.so.1
00146000-00147000 r--p 0001c000 08:03 108017 /lib/libgcc_s.so.1
00147000-00148000 rw-p 0001d000 08:03 108017 /lib/libgcc_s.so.1
00148000-0029b000 r-xp 00000000 08:03 999858 /lib/tls/i686/cmov/libc-2.11.1.so
0029b000-0029c000 ---p 00153000 08:03 999858 /lib/tls/i686/cmov/libc-2.11.1.so
0029c000-0029e000 r--p 00153000 08:03 999858 /lib/tls/i686/cmov/libc-2.11.1.so
0029e000-0029f000 rw-p 00155000 08:03 999858 /lib/tls/i686/cmov/libc-2.11.1.so
0029f000-002a2000 rw-p 00000000 00:00 0
002a2000-002d0000 r-xp 00000000 08:03 8607 /usr/lib/libfontconfig.so.1.4.4
002d0000-002d1000 r--p 0002d000 08:03 8607 /usr/lib/libfontconfig.so.1.4.4
002d1000-002d2000 rw-p 0002e000 08:03 8607 /usr/lib/libfontconfig.so.1.4.4
002d2000-002d9000 r-xp 00000000 08:03 8683 /usr/lib/libSM.so.6.0.1
002d9000-002da000 r--p 00006000 08:03 8683 /usr/lib/libSM.so.6.0.1
002da000-002db000 rw-p 00007000 08:03 8683 /usr/lib/libSM.so.6.0.1
002db000-002dd000 r-xp 00000000 08:03 1000560 /lib/tls/i686/cmov/libdl-2.11.1.so
002dd000-002de000 r--p 00001000 08:03 1000560 /lib/tls/i686/cmov/libdl-2.11.1.so
002de000-002df000 rw-p 00002000 08:03 1000560 /lib/tls/i686/cmov/libdl-2.11.1.so
002e1000-002fc000 r-xp 00000000 08:03 1581089 /lib/ld-2.11.1.so
002fc000-002fd000 r--p 0001a000 08:03 1581089 /lib/ld-2.11.1.so
002fd000-002fe000 rw-p 0001b000 08:03 1581089 /lib/ld-2.11.1.so
002fe000-00313000 r-xp 00000000 08:03 14657 /usr/lib/libaudio.so.2.4
00313000-00314000 r--p 00015000 08:03 14657 /usr/lib/libaudio.so.2.4
00314000-00315000 rw-p 00016000 08:03 14657 /usr/lib/libaudio.so.2.4
00315000-00338000 r-xp 00000000 08:03 106645 /lib/libpng12.so.0.42.0
00338000-00339000 r--p 00022000 08:03 106645 /lib/libpng12.so.0.42.0
00339000-0033a000 rw-p 00023000 08:03 106645 /lib/libpng12.so.0.42.0
0033a000-0034d000 r-xp 00000000 08:03 107857 /lib/libz.so.1.2.3.3
0034d000-0034e000 r--p 00012000 08:03 107857 /lib/libz.so.1.2.3.3
0034e000-0034f000 rw-p 00013000 08:03 107857 /lib/libz.so.1.2.3.3
0034f000-00353000 r-xp 00000000 08:03 10130 /usr/lib/libgthread-2.0.so.0.2400.1
00353000-00354000 r--p 00003000 08:03 10130 /usr/lib/libgthread-2.0.so.0.2400.1
00354000-00355000 rw-p 00004000 08:03 10130 /usr/lib/libgthread-2.0.so.0.2400.1
00355000-00392000 r-xp 00000000 08:03 10128 /usr/lib/libgobject-2.0.so.0.2400.1
00392000-00393000 r--p 0003c000 08:03 10128 /usr/lib/libgobject-2.0.so.0.2400.1
00393000-00394000 rw-p 0003d000 08:03 10128 /usr/lib/libgobject-2.0.so.0.2400.1
00394000-0039c000 r-xp 00000000 08:03 1212453 /usr/lib/libXrender.so.1.3.0
0039c000-0039d000 r--p 00007000 08:03 1212453 /usr/lib/libXrender.so.1.3.0
0039d000-0039e000 rw-p 00008000 08:03 1212453 /usr/lib/libXrender.so.1.3.0
003a1000-0048a000 r-xp 00000000 08:03 11080 /usr/lib/libstdc++.so.6.0.13
0048a000-0048b000 ---p 000e9000 08:03 11080 /usr/lib/libstdc++.so.6.0.13
0048b000-0048f000 r--p 000e9000 08:03 11080 /usr/lib/libstdc++.so.6.0.13
0048f000-00490000 rw-p 000ed000 08:03 11080 /usr/lib/libstdc++.so.6.0.13
00490000-00497000 rw-p 00000000 00:00 0
00497000-0049e000 r-xp 00000000 08:03 1000573 /lib/tls/i686/cmov/librt-2.11.1.so
0049e000-0049f000 r--p 00006000 08:03 1000573 /lib/tls/i686/cmov/librt-2.11.1.so
0049f000-004a0000 rw-p 00007000 08:03 1000573 /lib/tls/i686/cmov/librt-2.11.1.so
004a0000-004a2000 r-xp 00000000 08:03 8707 /usr/lib/libXau.so.6.0.0
004a2000-004a3000 r--p 00001000 08:03 8707 /usr/lib/libXau.so.6.0.0
004a3000-004a4000 rw-p 00002000 08:03 8707 /usr/lib/libXau.so.6.0.0
004a4000-004a7000 r-xp 00000000 08:03 106690 /lib/libuuid.so.1.3.0
004a7000-004a8000 r--p 00002000 08:03 106690 /lib/libuuid.so.1.3.0
004a8000-004a9000 rw-p 00003000 08:03 106690 /lib/libuuid.so.1.3.0
004aa000-00720000 r-xp 00000000 08:03 12218 /usr/lib/libQtCore.so.4.6.2
00720000-00727000 r--p 00275000 08:03 12218 /usr/lib/libQtCore.so.4.6.2
00727000-00728000 rw-p 0027c000 08:03 12218 /usr/lib/libQtCore.so.4.6.2
00728000-00799000 r-xp 00000000 08:03 8969 /usr/lib/libfreetype.so.6.3.22
00799000-0079d000 r--p 00070000 08:03 8969 /usr/lib/libfreetype.so.6.3.22
0079d000-0079e000 rw-p 00074000 08:03 8969 /usr/lib/libfreetype.so.6.3.22
0079e000-007b3000 r-xp 00000000 08:03 11939 /usr/lib/libICE.so.6.3.0
007b3000-007b4000 r--p 00014000 08:03 11939 /usr/lib/libICE.so.6.3.0
007b4000-007b5000 rw-p 00015000 08:03 11939 /usr/lib/libICE.so.6.3.0
007b5000-007b7000 rw-p 00000000 00:00 0
007b7000-007bb000 r-xp 00000000 08:03 11943 /usr/lib/libXdmcp.so.6.0.0
007bb000-007bc000 r--p 00003000 08:03 11943 /usr/lib/libXdmcp.so.6.0.0
007bc000-007bd000 rw-p 00004000 08:03 11943 /usr/lib/libXdmcp.so.6.0.0
007bd000-007bf000 r-xp 00000000 08:03 1753611 /usr/lib/gconv/UTF-16.so
007bf000-007c0000 r--p 00001000 08:03 1753611 /usr/lib/gconv/UTF-16.so
007c0000-007c1000 rw-p 00002000 08:03 1753611 /usr/lib/gconv/UTF-16.so
007c1000-007c7000 r-xp 00000000 08:03 1212580 /usr/lib/libXrandr.so.2.2.0
007c7000-007c8000 r--p 00005000 08:03 1212580 /usr/lib/libXrandr.so.2.2.0
007c8000-007c9000 rw-p 00006000 08:03 1212580 /usr/lib/libXrandr.so.2.2.0
007c9000-007cd000 r-xp 00000000 08:03 1212489 /usr/lib/libXfixes.so.3.1.0
007cd000-007ce000 r--p 00003000 08:03 1212489 /usr/lib/libXfixes.so.3.1.0
007ce000-007cf000 rw-p 00004000 08:03 1212489 /usr/lib/libXfixes.so.3.1.0
007cf000-00897000 r-xp 00000000 08:03 1581094 /lib/libglib-2.0.so.0.2400.1
00897000-00898000 r--p 000c7000 08:03 1581094 /lib/libglib-2.0.so.0.2400.1
00898000-00899000 rw-p 000c8000 08:03 1581094 /lib/libglib-2.0.so.0.2400.1
00899000-008b1000 r-xp 00000000 08:03 11945 /usr/lib/libxcb.so.1.1.0
008b1000-008b2000 r--p 00017000 08:03 11945 /usr/lib/libxcb.so.1.1.0
008b2000-008b3000 rw-p 00018000 08:03 11945 /usr/lib/libxcb.so.1.1.0Aborted
wszedzie zwalniam dynamicznie alokowana pamiec, w ten sposob:
tab = new QPushButton*[k];
for (int i=0; i<k; ++i)
tab[i] = new QPushButton[k];
for (int i=0; i<k; ++i)
delete tab[i];
delete [] tab;
no to jest chyba ok (czy moze po tym jak zaczalem pracowac w Javie, cos mi ucieklo ?)
debugger zwraca:
Podproces zatrzymany poniewaz otrzymal on sygnal z systemu opearcyjnego
nazwa sygnalu: SIGABRT
znaczenie sygnalu: Aborted
for (int i=0; i<k; ++i)
delete tab[i];
czy przypadkiem nie:
for (int i=0; i<k; ++i)
delete [] tab[i];
?
sprobowalem, ale nic to nie zmienia
valgrind pokazuje invalid free, wiec cos z tym zwalnianiem tablicy tablic
ok, rozwiazalem problem