[C] linked list

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Mr_gadget
  • Registratie: Juni 2004
  • Laatst online: 06:29

Mr_gadget

C8H10N4O2 powered

Topicstarter
Ik probeer een linked list te maken die in elke node een cijfer opslaat en het adres van de volgende node. Zit aleen een beetje in de war met malloc()..een node die ik hier mee aanmaak zou ook als gewone node gewijzigd moeten kunnen worden toch?

C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include  <stdlib.h> 
#include <stdio.h> 
#include <math.h>
typedef struct node node;
struct node{
    char digit;
    node* p;
};

node* convert_to_list(int num);

main()
{
    node *node_res=0;
node_res=convert_to_list(123456);
printf("pt main: %c\n", node_res->digit);


}


node* convert_to_list(int num)
{
    int i,a;
    char *arr;
    node *node_ptr=0;
    node node1;
    node *temp;
    node *list_pointer;

    a= log10(num);
    arr = malloc((int)a*sizeof(char));
    //node1.p =node_ptr;
    temp = &node1;
    for (i=0; i<=a; ++i) 
    {
        
        node_ptr=(node*) malloc(sizeof(node));
        node_ptr->p=temp;
        temp = node_ptr; 

    }
    list_pointer= &node1;
    for (i=0; i<=a; ++i) 
    {   
        node_ptr->digit=arr[i]; 
        list_pointer = list_pointer->p;
    }
    return &node1;
}

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 17-09 14:05

.oisyn

Moderator Devschuur®

Demotivational Speaker

Kun je specifieker zijn? Wat is een "gewone node"?

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Mr_gadget
  • Registratie: Juni 2004
  • Laatst online: 06:29

Mr_gadget

C8H10N4O2 powered

Topicstarter
een node gedefineerd als node gewone_node ipv node *ptr_node.

[ Voor 32% gewijzigd door Mr_gadget op 23-10-2009 17:43 ]


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 17-09 14:05

.oisyn

Moderator Devschuur®

Demotivational Speaker

Op de stack dus. Nee, die kun je niet uit je functie retourneren, want hij staat immers op de stack. Op het moment dat je functie exit is je node foetsie en zit je met een stale pointer.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 13-09 00:05
Waar kopieer je nou eigenlijk de cijfers uit num naar *arr ?

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 17-09 14:05

.oisyn

Moderator Devschuur®

Demotivational Speaker

Regels 44 t/m 48 ;)
oh wacht dat is van arr naar de nodes. Idd, dat gebeurt nergens.

[ Voor 65% gewijzigd door .oisyn op 23-10-2009 17:49 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • leuk_he
  • Registratie: Augustus 2000
  • Laatst online: 15-07 15:35

leuk_he

1. Controleer de kabel!

Volgens mij malloc je niet ge
.oisyn schreef op vrijdag 23 oktober 2009 @ 17:45:
Op de stack dus. Nee, die kun je niet uit je functie retourneren, want hij staat immers op de stack. Op het moment dat je functie exit is je node foetsie en zit je met een stale pointer.
Ja, die van malloc kun je terug geven, die "&node1" niet dus. Free wordt ook moeilijk.

dus "node node1; "

Wordt
node *pStart=malloc(sizeof(node));


-Meestal sluit je je linked lijst van met een null punter.
-arr is nooit geinitialiseerd, en 1 kleiner gemalloc dan je nodig hebt?

Need more data. We want your specs. Ik ben ook maar dom. anders: forum, ff reggen, ff topic maken
En als je een oplossing hebt gevonden laat het ook ujb ff in dit topic horen.


Acties:
  • 0 Henk 'm!

  • Mr_gadget
  • Registratie: Juni 2004
  • Laatst online: 06:29

Mr_gadget

C8H10N4O2 powered

Topicstarter
Het idee is dat ik dan door het getal kan lopen. Of kan het sneller?

Acties:
  • 0 Henk 'm!

  • DataGhost
  • Registratie: Augustus 2003
  • Nu online

DataGhost

iPL dev

Hangt er helemaal van af wat je wilt doen. Als je er alleen maar 'doorheen wilt lopen' kan je net zo goed een string (of array van characters) gebruiken.

Acties:
  • 0 Henk 'm!

  • Mr_gadget
  • Registratie: Juni 2004
  • Laatst online: 06:29

Mr_gadget

C8H10N4O2 powered

Topicstarter
Nu kan de grootte ervan worden aangepast voor kleinere of grotere getallen.

Maar hij crashed op regel 47. Hier wil ik door de list heenlopen om de getallen er in te zetten..

C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include  <stdlib.h> 
#include <stdio.h> 
#include <math.h>
typedef struct node node;
struct node{
    char digit;
    node* p;
};

node* convert_to_list(int num);

main()
{
    node *node_res=0;
node_res=convert_to_list(123456);
printf("pt main: %c\n", node_res->digit);


}


node* convert_to_list(int num)
{
    int i,a;
    char *arr;
    node *node_ptr=0;
    
    node *temp;
    node *list_pointer;
    node *pStart=malloc(sizeof(node)); 
    
    a= log10(num);
    arr = malloc((int)a*sizeof(char)+1);
                sprintf (arr, "%d" ,num); //(num, buf, 10);
    //node1.p =node_ptr;
    temp = pStart;
    for (i=0; i<=a; ++i) 
    {
         
        node_ptr=(node*) malloc(sizeof(node));
        node_ptr->p=temp;
        temp = node_ptr; 


    }
    list_pointer= pStart; 

    for (i=0; i<=a; ++i) 
    {   
        list_pointer->digit=arr[i]; 
        list_pointer = list_pointer->p;
    }
    return pStart;
}

aangespast naar de opmerkingen

[ Voor 4% gewijzigd door Mr_gadget op 23-10-2009 18:33 ]


Acties:
  • 0 Henk 'm!

  • leuk_he
  • Registratie: Augustus 2000
  • Laatst online: 15-07 15:35

leuk_he

1. Controleer de kabel!

Je voegt elementen vooraan in de linked list toe he?

dus
listnode = temp

return temp

-Arr bevat nog steeds undefined waarden? (chrash hij niet op, maar levert gewoon onzin op)
-Variabele namen zijn niet echt beschrijvend. (temp/arr)

[ Voor 14% gewijzigd door leuk_he op 23-10-2009 22:39 ]

Need more data. We want your specs. Ik ben ook maar dom. anders: forum, ff reggen, ff topic maken
En als je een oplossing hebt gevonden laat het ook ujb ff in dit topic horen.


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 17-09 14:05

.oisyn

Moderator Devschuur®

Demotivational Speaker

Ik zou gewoon temp op NULL zetten, en dan de nodes aanmaken, en waar temp dan op einigt is de start node. Nu maak je in feite ook 1 node teveel. Maar dit had je allemaal kunnen zien als je gewoon een fatsoenlijke debugger gebruikt had. En nee, GoT is geen debugger.

[ Voor 6% gewijzigd door .oisyn op 23-10-2009 18:21 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Mr_gadget
  • Registratie: Juni 2004
  • Laatst online: 06:29

Mr_gadget

C8H10N4O2 powered

Topicstarter
Ik gebruik visual studio maar ik kan uit
code:
1
-       *pStart {digit='Í' p=0xcdcdcdcd }   node

niet veel afleiden.. :/

Hoe bedoel je temp op NULL zetten?
Waar ik een beetje op vast zit zijn de links van node naar node.

Acties:
  • 0 Henk 'm!

  • NC83
  • Registratie: Juni 2007
  • Laatst online: 21-08 21:44
p=0xcdcdcdcd uninitialized pointer. Uniniitialized geheugen heeft altijd een voorkomend patroon in debug, zodat je snel kan zien of een pointer wel een waarde heeft. cdcd is een van deze patronen, zo kan je ook badf00d hebben en zijn er nog wel een paar andere.

[ Voor 76% gewijzigd door NC83 op 23-10-2009 22:12 ]

ex-FE Programmer: CMR:DiRT2,DiRT 3, DiRT Showdown, GRID 2, Mad Max


Acties:
  • 0 Henk 'm!

  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

NC83 schreef op vrijdag 23 oktober 2009 @ 22:11:
zo kan je ook badf00d hebben en zijn er nog wel een paar andere.
deadbeef :)

Acties:
  • 0 Henk 'm!

  • Mr_gadget
  • Registratie: Juni 2004
  • Laatst online: 06:29

Mr_gadget

C8H10N4O2 powered

Topicstarter
ahah!
Maar kan iemand me een tip geven waarom hij bij regel 51 (list_pointer = list_pointer->p; ) vastloopt?

Acties:
  • 0 Henk 'm!

  • leuk_he
  • Registratie: Augustus 2000
  • Laatst online: 15-07 15:35

leuk_he

1. Controleer de kabel!

Mr_gadget schreef op zaterdag 24 oktober 2009 @ 00:41:
ahah!
Maar kan iemand me een tip geven waarom hij bij regel 51 (list_pointer = list_pointer->p; ) vastloopt?
Afbeeldingslocatie: http://i35.tinypic.com/2ytpu0p.jpg

Nogmaals, je voegt de element voorin de linked list toe he?

Need more data. We want your specs. Ik ben ook maar dom. anders: forum, ff reggen, ff topic maken
En als je een oplossing hebt gevonden laat het ook ujb ff in dit topic horen.


Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 17-09 21:27

Creepy

Tactical Espionage Splatterer

Niet om het 1 of ander maar ik zie je al wel gewoon een paar losse vragen stellen zonder dat je zelf laat zien wat je zelf al hebt geprobeerd om je probleem op te lossen, of je al aan het debuggen bent geweest etc. Dat zijn wel zaken die we hier van je verwachten. Het is niet de bedoeling dat wij voor je gaan lopen debuggen.

[ Voor 10% gewijzigd door Creepy op 24-10-2009 13:15 ]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney

Pagina: 1