[C] pointer in structure

Pagina: 1
Acties:

  • Marc
  • Registratie: November 2001
  • Laatst online: 01-12-2021
als ik de volgende code compile:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>

struct a {
      int do_nothing;

      struct b *ptr;
} one;

struct b {
      char w00t[40];
};

main()
{
      strcpy(one.ptr->w00t, "blaaaaaaat");
      printf("%s", one.ptr->w00t);

      return 0;

}

krijg ik geen errors, maar als ik hem run krijg ik wel een segmentation fault, weet iemand hoe ik dit kan oplossen?

  • TlighT
  • Registratie: Mei 2000
  • Laatst online: 22-03 10:40
Je hebt geen geheugen toegewezen aan *ptr, het moet iets zijn als:
code:
1
2
3
4
5
6
7
8
9
10
main()
{
        one.ptr = alloc(sizeof(struct b));
      strcpy(one.ptr->w00t, "blaaaaaaat");
      printf("%s", one.ptr->w00t);
        free(one.ptr);

      return 0;

}

zoiets dus, mijn c kennis is een beetje roestig...

  • Marc
  • Registratie: November 2001
  • Laatst online: 01-12-2021
Op zondag 17 maart 2002 11:25 schreef TlighT het volgende:
Je hebt geen geheugen toegewezen aan *ptr, het moet iets zijn als:
code:
1
2
3
4
5
6
7
8
9
10
main()
{
        one.ptr = alloc(sizeof(struct b));
      strcpy(one.ptr->w00t, "blaaaaaaat");
      printf("%s", one.ptr->w00t);
        free(one.ptr);

      return 0;

}

zoiets dus, mijn c kennis is een beetje roestig...
ja het werkt!
alleen het moest malloc() zijn ipv alloc() maar daar kon ik nog wel opkomen :P

bedankt 8-)

  • morphje
  • Registratie: Juni 2001
  • Laatst online: 05-09 07:36

morphje

let's all love lain

code:
1
2
3
4
5
6
7
#include <stdio.h>

struct a {
      int do_nothing;

      struct b *ptr;
} one;

Hmmm, misschien een beetje gezeik, maar globaal gedefineerde variabelen zijn echt de grootste nono's in c. ik raad je het toch aan als volgt te doen. Globale variablen zijn een keer mijn nachtmerrie geworden, kostte me een paar dagen om alles te herschrijven :)
code:
1
2
3
4
5
6
7
8
9
struct a {
        int a;
        int b;
       };

main()
{
  struct a blaat;
}

  • Marc
  • Registratie: November 2001
  • Laatst online: 01-12-2021
ja daar heb ik al vaker van gehoord, maar waarom is het zo erg als je ze globaal declareerd?

Verwijderd

Op zondag 17 maart 2002 12:02 schreef Sanchez het volgende:
ja daar heb ik al vaker van gehoord, maar waarom is het zo erg als je ze globaal declareerd?
als je ze niet static maakt kun je in grotere projecten name conflicts krijgen (omdat je dus diezelfde naam ergens anders ook globaal gebruikt), daarnaast is je code niet re-entrant (dus je kunt geen twee instances runnen van dezelfde shared library).

Plus dat het gewoon lelijk is :)
Pagina: 1