Forum » Programiranje » [ C ] Kazalci v strukturah
[ C ] Kazalci v strukturah
Oven-2k ::
Zdravo! Delam en program, pa se v eni vrstici zatakne (čeprav compiler to mirno prebavi in ne javi nobeih opozoril ali napak) in program se sesuje.
Relavanten izvleček iz kode je tak :
struct Node{
char Data[255];
struct Node *Left;
struct Node *Right;
};
void Something(struct Node *RootNode)
{
struct Node newNode;
RootNode->Left=&newNode; //NAPAKA SE ZGODI V TEJ VRSTICI???????!!!!!!!!!!!!!!
}
Se komu sanja kje sem ga polomil?
Relavanten izvleček iz kode je tak :
struct Node{
char Data[255];
struct Node *Left;
struct Node *Right;
};
void Something(struct Node *RootNode)
{
struct Node newNode;
RootNode->Left=&newNode; //NAPAKA SE ZGODI V TEJ VRSTICI???????!!!!!!!!!!!!!!
}
Se komu sanja kje sem ga polomil?
JerKoJ ::
hmm ko znotraj funkcije defineras spremenljiivko se le ta ustvari na stacku in se izbrise ko gres iz funkcije ven
da se temu izognes moras spremenljivko generirat dinamicno na heapu
v tvojem primeru
struct Node *newNode=(struct Node*) malloc(sizeof(struct Node));
RootNode->Left=newNode;
aja pa na konc ne pozab spraznt heapa z free operatorjem
ker se drugac pojav memory leak
da se temu izognes moras spremenljivko generirat dinamicno na heapu
v tvojem primeru
struct Node *newNode=(struct Node*) malloc(sizeof(struct Node));
RootNode->Left=newNode;
aja pa na konc ne pozab spraznt heapa z free operatorjem
ker se drugac pojav memory leak
Oven-2k ::
Ja :) Sm sam ugotovu, da sm precej stvari pozabu ja. Zdej sm kr napisu novo funkcijo:
struct Node* CreateNode()
{
struct Node* cNode = malloc(sizeof(struct Node));
strcpy(cNode->Data,"");
cNode->Left=NULL;
cNode->Right=NULL;
return cNode;
}
Tako da če rabm kašn nov Node samo pokličem "struct Node nekinovga = CreateNode();"
Pa hvala za odgovor, btw: na free bi čist pozabu brez tvojega nasveta
struct Node* CreateNode()
{
struct Node* cNode = malloc(sizeof(struct Node));
strcpy(cNode->Data,"");
cNode->Left=NULL;
cNode->Right=NULL;
return cNode;
}
Tako da če rabm kašn nov Node samo pokličem "struct Node nekinovga = CreateNode();"
Pa hvala za odgovor, btw: na free bi čist pozabu brez tvojega nasveta
BigWhale ::
Tam kjer lahko uporabi calloc() je precej bolj varen.
And remeber, free the c/mallocs! ;)
And remeber, free the c/mallocs! ;)
64202 ::
Pa se malenkost bolj varna C++ verzija malloca:
Tko se pa uporabi:
Now, how kewl is that!?
template <class T> T *cxx_malloc(int num) { return (T*) malloc(num * sizeof(T)); }
Tko se pa uporabi:
int *bu = cxx_malloc<int>(30);
Now, how kewl is that!?
Oven-2k ::
Hja, bom vedu za takrat ko bom v C++ kej počel. Tole je nažalost samo C kar zdj čaram. Sm pa dokončal pol program uspešno :) In nism pozabu na free :D :D hehe.
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | Predstavitev dvojiškega drevesa z seznamomOddelek: Programiranje | 1958 (1558) | ktka |
» | [C] kazalčni seznamOddelek: Programiranje | 3116 (2930) | MrBrdo |
» | [C] Povezani seznami in kazalciOddelek: Programiranje | 2574 (2141) | Good Guy |
» | sitemapOddelek: Izdelava spletišč | 1126 (1027) | rokpok |
» | [NALOGA][C] fri-vsp - strukture (struct)Oddelek: Programiranje | 1562 (1403) | Vesoljc |