| link (bude jenom mesic): [link]
Potreboval bych poradit s jednou chybičkou. Ve fkci prazdna () mam pointer na pole buffer . Pro pole si alokuju trosku pameti. Pointer predam fkci horizontal (...*buffer []...) jako &buffer . V teto fkci s polem nic nedelam, jenom ho predam do fkce pridej (...*buffer []...) jako buffer . V teto fkci se pole pokusim realokovat, ale:
realokace buď neproběhne, nebo se program zastaví uvnitř realloc (), to nevím. Vím jenom, že program nic nedělá jako zaseklý v nekonečnej smyčce a Watson ani debugger integrovaný v Dev-C++ se nehlásí.
Chtěl bych poděkovat Drekinovi, který mi s tímto hodně pomohl (ale furt mi to nejde :)). Díky všem, kteří zkousnou můj prasácký kód a všem, který najdou nějakou chybičku, ať už o ní vim nebo ne. (odpovědět) | NyQ | |  | 13.12.2008 21:36 |
|
|
|
re: C, ukazatele a realloc | # |
| called verticaly
realloc
--15759-- VALGRIND INTERNAL ERROR: Valgrind received a signal 11 (SIGSEGV) - exiting
--15759-- si_code=1; Faulting address: 0x12; sp: 0x625D7E68
valgrind: the 'impossible' happened:
Killed by fatal signal
==15759== at 0x3802347A: (within /usr/lib/valgrind/x86-linux/memcheck)
==15759== by 0x38023B21: (within /usr/lib/valgrind/x86-linux/memcheck)
==15759== by 0x380027E9: (within /usr/lib/valgrind/x86-linux/memcheck)
==15759== by 0x38039085: (within /usr/lib/valgrind/x86-linux/memcheck)
==15759== by 0x3804D2C8: (within /usr/lib/valgrind/x86-linux/memcheck)
sched status:
running_tid=1
Thread 1: status = VgTs_Runnable
==15759== at 0x4006E8C: realloc (in /usr/lib/valgrind/x86-linux/vgpreload_memch eck.so)
==15759== by 0x8048BE1: pridej (in /home/vojta/C++/Nyq)
==15759== by 0x8048FE7: horizontal (in /home/vojta/C++/Nyq)
==15759== by 0x8049347: prazdna (in /home/vojta/C++/Nyq)
==15759== by 0x8049907: priprav (in /home/vojta/C++/Nyq)
==15759== by 0x8049CE0: main (in /home/vojta/C++/Nyq)
chyba nastane určitě v realloc(), proč, to je těžké objevit ;)
myslím, že si_code=1 ve výpisu valgrindu znamená, že zapisuješ do oblasti paměti, kterou nemáš namapovanou...čímž asi moc nepomůžu, já vím ;) (odpovědět) | mr.Crow. | 213.211.34.* | 14.12.2008 16:03 |
|
|
|
re: C, ukazatele a realloc | # |
| nojo..ty se jmenuješ Vojta? :)
já myslim, že je chyba v realloc, ne? když to dál nejde..zavolám realloc a tim to všechno konči.. (odpovědět) | NyQ_nolog | 77.48.72.* | 14.12.2008 16:15 |
|
|
|
re: C, ukazatele a realloc | # |
| At ziji programovaci jazyky s automatickou spravou pameti, garbage collectorem a bez pointeru :-D
|
|
V
----------
public static void main(String args[]){
throw new UnsupportedOperationException("Not implemented!");
}
(odpovědět) | |
|
|
re: C, ukazatele a realloc | # |
| at ziji lidi co maj na poradny hardware
----------
Harvie's blog: [link] g33k-shop: [link] fs: [link]
Registered GNU/LINUX user #468114 [link] (odpovědět) | Harvie | | | 283782978 | 14.12.2008 20:55 |
|
|
|
re: C, ukazatele a realloc | # |
| No, je videt, ze jsi asi v zivote nevidel poradnou aplikaci v Jave. Rozdil oproti jinym jazykum je minimalni a s kazdou nasledujici verzi Javy se jeste snizuje. Navic - rychlost neni vzdy prioritou. A v takovych pripadech je hole silenstvi to delat v necem zastaralem.
----------
public static void main(String args[]){
throw new UnsupportedOperationException("Not implemented!");
}
(odpovědět) | |
|
|
re: C, ukazatele a realloc | # |
| Je sice pekne, ze JAVA je nej a je na vse, ale na veci na urovni HW se nic C nevyrovna.
A co bude s Javou za 20 let ? Viz clanek na PCTuningu (odpovědět) | BLR | 213.192.9.* | 18.12.2008 21:23 |
|
|
|
re: C, ukazatele a realloc | # |
| o dlouhé večery s gdb a valgrindem se kvůli nějakému pokroku připravit nenechám! :o) (odpovědět) | mr.Crow. | 213.211.34.* | 14.12.2008 21:50 |
|
|
|
re: C, ukazatele a realloc | # |
| Harvie, pr0ph3t: to mi sem netahejte :)
ta chyba může nastat buď proto, že chci moc :)
nebo proto, že to chci někam do *
jinak když jsem alokoval víc, tak mi to uvízlo v dlouhej smyčce a nakonec to stejně chcíplo -> mám tam chybu v obsahu toho bufferu..musim ho cistit (odpovědět) | NyQ | |  | 14.12.2008 21:23 |
|
|
|
re: C, ukazatele a realloc | # |
| zkusil jsem si napsat vlastní náhradu realloc(), chyba byla naprosto stejná (malloc() hlásí "memory corruption")...zkusil jsem ale v každém volání mé náhrady realloc() alokovat 100x více paměti, než o kolik bylo žádáno a chyba zmizela (ale stejně jsem časem dostal nějaký segfault, valgrind mi hlásí, že často hrabeš v nealokované paměti - být tebou, nainstaluju si valgrind a všechny nesrovnalosti opravím ;))
malloc(): memory corruption nastává prý v případě:
* Writing beyond the end of a memory block obtained via malloc
or realloc.
* Writing/reading memory that has been released with free().
...takže doufám, že moje domněnky jsou správé, abych nemystifikoval. (odpovědět) | mr.Crow. | 213.211.34.* | 14.12.2008 21:33 |
|
|
|
re: C, ukazatele a realloc | # |
| no když jsem si řek najednou o všechnu paměť, tak [link]
valgrind, používám hlavně widle..ale když si najdu nějaký ide pro linux,...asi na linuxsoftu nebo ábíčku...
jestli jsem to pochopil, tak malloc zapisuje někam, kam nemá? může to souviset s *buffer? myslím, že jsem ho předal dobře, viz test na [link] porovnejte to někdo, mě se to zdá stejný... (odpovědět) | NyQ | |  | 15.12.2008 17:16 |
|
|
|
re: C, ukazatele a realloc | # |
| podle mě zapisuješ někde jinde v programu něco někam blbě, do paměti, kterou nemáš namapovanou a kvůli tomu malloc později selže (asi mu nějak vadí mapovat paměť, která je "popsaná" chybným pointerem, což moc dobře pořádně nechápu proč, proto doufám, že tento thread navštíví někdo zkušenější a poradí) (odpovědět) | mr.Crow. | 213.211.34.* | 15.12.2008 20:15 |
|
|
|
re: C, ukazatele a realloc | # |
| pole A1, odkryt -> radek 141 if ((*buffer = (unsigned *) realloc ( (void *)*buffer , (*p_end_buff + QUANTUM) * sizeof (unsigned)))== NULL) return PAMET; zpusobil SEGFAULT kvuli Invalid pointer. zrejme buffer neni platny pointer na alokovany blok pameti. (odpovědět) | gfd | 77.104.253.* | 16.12.2008 16:45 |
|
|
|
re: C, ukazatele a realloc | # |
| jo, s *buffer se někde počítá špatně, protože pokud provedu realloc() bez kopírování starého bloku paměti na nově alokované místo + odstraním uvolnění starého bloku paměti (tzn. realloc() vůbec nepracuje s ukazatelem, předaným jako první parametr), chyba zmizí (ale dostanu segfault někde jinde, což je asi známka toho, že se s tím ukazatelem pracuje špatně..nebo je to následek chybné práce mého upraveného realloc(), nevím...) (odpovědět) | mr.Crow. | 213.211.34.* | 16.12.2008 17:05 |
|
|
|
re: C, ukazatele a realloc | # |
| to me taky napadlo, proto ten [link] myslim, že to je to samý? (odpovědět) | NyQ | |  | 16.12.2008 17:17 |
|
|
|
re: C, ukazatele a realloc | # |
| Vyzkousej si praci s pointery a poli na necem mensim, cele to mas divoke. Taky se vyhni tem tunam dereferenci, pak neni divu, ze se v tom ztracis.
(odpovědět) | prc | 213.211.51.* | 18.12.2008 15:52 |
|
|
|