[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: char** benutzen




>>>>> Till Gloeggler writes:

Till> Ich habe folgendes Problem: msh.h: [...] extern char**
Till> aliaslist; [...]  msh.c: [...] char **aliaslist = NULL; [...]
Till> Wenn ich nun in cmds.c der aliaslist etwas zuweise: aliaslist =
Till> malloc(100); *aliaslist = "xyz"; dann ist es beim naechsten
Till> Aufruf der Inhalt wieder verschwunden und es steht nur noch
Till> Datenmuell drin.

Ist mir nicht ganz klar wo das Problem liegt - aber der Ansatz selbst
zeigt vielleicht etwas Irritation.

(1) Warum nimmst Du nicht eine slist - immerhin nennst Du ja schon die
    Variable aliaslist (Betonung auf die zweite Silbe). Die aliaslist
    ist also eigentlich ein Vektor von char* Zeigern.

(2) Das aliaslist = malloc(100) allokiert 100 Bytes in denen Du dann
    Zeiger ablegen willst (es ist ja schliesslich in char **). Frage:
    Wieviel Zeiger passen da rein? Und warum 100 und nicht 42?

(3) Die Zuweisung *aliaslist = "xyz" ist awquivalent zu
    aliastlist[0] = xyz was eventuell gewuenscht ist (vielleicht
    aber auch nicht).

(4) Da Du nicht sagst, was unter "beim naechsten Aufruf der Inhalt
    wieder verschwunden" genau zu verstehen ist, kann man diese Frage
    nicht wirklich beantworten.

Reduziere das Problem einfach auf ein Minimalbeispiel und erklaere es
einem Teddybaeren/Komilitonen (oder falls keiner da ist schick es an
diese Liste). Dann werden wir das Raetsel loesen...

/js

-- 
Juergen Schoenwaelder    <http://www.informatik.uni-osnabrueck.de/schoenw/>