| Autor | Správa |
Fico
 Skúsený užívateľ
 Založený: 11.01.2009 Príspevky: 1052
 | Zaslal: Ne 29.01.12 14:14 |   |
Jasne, ak kompilujes pre C++, navratova hodnota realloc treba pretypovat. V cistom C by sa pretypovat nemala, ja som ti zasielal ukazku v C, kedze podla nazvu temy ( malloc ) pracujes s C.
K problemu: pod g++ mi ziadne chyby nehadze, po kontrole valgrindom vypise:
| citácia: | | All heap blocks were freed -- no leaks are possible |
Takze ti pomoct neviem. Skus sa pohrat s debuggerom, krokuj program a zisti kde pada, aku hodnotu ma pointer pole na riadku, kde sa uvolni, atd. Skus napr vynechat volanie funkcie vymen, atd atd. Viac ti poradit nedokazem, nakolko mne to bezi v poriadku. Jedine, co som musel pridat do programu, aby sa vobec skompiloval ( nechapem, co za mix kniznic to microsoft ma, ale budis... ) su tieto hlavicky:
| kód: | #include <stdlib.h>
#include <string.h> |
|
| |
   |
 |
Carm@gedon
 Užívateľ
 Založený: 18.12.2006 Príspevky: 28
 | Zaslal: Ne 29.01.12 15:49 |   |
| Fico napísal: | Jasne, ak kompilujes pre C++, navratova hodnota realloc treba pretypovat. V cistom C by sa pretypovat nemala, ja som ti zasielal ukazku v C, kedze podla nazvu temy ( malloc ) pracujes s C.
K problemu: pod g++ mi ziadne chyby nehadze, po kontrole valgrindom vypise:
| citácia: | | All heap blocks were freed -- no leaks are possible |
Takze ti pomoct neviem. Skus sa pohrat s debuggerom, krokuj program a zisti kde pada, aku hodnotu ma pointer pole na riadku, kde sa uvolni, atd. Skus napr vynechat volanie funkcie vymen, atd atd. Viac ti poradit nedokazem, nakolko mne to bezi v poriadku. Jedine, co som musel pridat do programu, aby sa vobec skompiloval ( nechapem, co za mix kniznic to microsoft ma, ale budis... ) su tieto hlavicky:
| kód: | #include <stdlib.h>
#include <string.h> |
|
pracujem s C
slusim to skompilovat v dev++
inak nevies este ze co vypise napr:
*(str)+1 //neni to nahodou blbost ?
Dik
//edit: v Dev mi to ide v pohode, tak nieco vo Visualku bude zle... :/ |
| |
  |
 |
Fico
 Skúsený užívateľ
 Založený: 11.01.2009 Príspevky: 1052
 | Zaslal: Ne 29.01.12 16:12 |   |
Ak pracujes s C, tak nemozes pripojit hlavicku <iostream>, ta je totiz pre jazyk C++. Taktiez plati to, ze by si nemal pretypovat navratove hodnoty malloc/realloc/calloc a treba pripojit kniznice, ktore som uviedol. Visual Studio zrejme podla iostream usudilo, ze ide o C++ kod a tak ho potom aj kompilovalo, preto tie chyby.
Zapis *(str)+1 je chybny, nemal si namysli *(str+1) ? Ak ano, tak je to ekvivalent zapisu str[1]; |
| |
   |
 |
Carm@gedon
 Užívateľ
 Založený: 18.12.2006 Príspevky: 28
 |
| Fico napísal: | Ak pracujes s C, tak nemozes pripojit hlavicku <iostream>, ta je totiz pre jazyk C++. Taktiez plati to, ze by si nemal pretypovat navratove hodnoty malloc/realloc/calloc a treba pripojit kniznice, ktore som uviedol. Visual Studio zrejme podla iostream usudilo, ze ide o C++ kod a tak ho potom aj kompilovalo, preto tie chyby.
Zapis *(str)+1 je chybny, nemal si namysli *(str+1) ? Ak ano, tak je to ekvivalent zapisu str[1]; |
ne prepac... pomylil osm sa ma to byt (*str)+1... to as vrati prvy znak pola a pripocita k nemu +1 nie?
cize napr mam pole "AHOJ " tak vrati A+1 a to je B ... je to spravne ?
//edit: uz viem preco mi hadze error... lebo pre '\0' nieje alokovane miesto v poli  |
| |
  |
 |
Fico
 Skúsený užívateľ
 Založený: 11.01.2009 Príspevky: 1052
 | Zaslal: Po 30.01.12 10:55 |   |
| Carm@gedon napísal: | | cize napr mam pole "AHOJ " tak vrati A+1 a to je B ... je to spravne ? |
Ano, spravne. (*str) == str[0], cize znak na danej adrese. A ak uz pripocitas nejaku hodnotu k znaku, tak to bude znak z danou ASCII hodnotou. |
| |
   |
 |
|
Nemôžete pridávať nové témy do tohto fóra. Nemôžete odpovedať na témy v tomto fóre. Nemôžete upravovať svoje príspevky v tomto fóre. Nemôžete mazať svoje príspevky v tomto fóre. Nemôžete hlasovať v tomto fóre.
|
|