Speicher Allokation
-
moin,
ich bereite mich gerade auf eine c-klausur vor und hätte einmal eine frage:
Gegeben sei das folgende Programm:
*#include <stdio.h>
char * tab[] = {"Dreyfuss","Kimball","dwelt","Kodachrome","McAllister"};
char ** ptab[] = { tab+4 , tab+3 , tab+2 , tab+1 , tab};
char *** ppp = ptab;int main( int argc , char *argv[] ){
printf("%s\n", ((ppp+3)-1)+4);
printf("%s\n", ppp[3][0]+3);
printf("%s\n", ((ppp+2))+1);
printf("%s\n", (++ppp+8);
printf("%s\n", (--ppp+5);
return 0
}Wieviel Speicher wird von den Variablen tab, ptab und ppp und den in den Initialisierungen vorkommenden Konstanten benötigt? Geben Sie hierfür einen Ausdruck mit dem sizeof Operator an.*
Das ist nun eine Aufgabegabe aus einer Klausur!
Meine Lösung ist bestimmt nicht richtig und ich wollte fragen, ob jemand die Antort berechnen kann
mein Ansatz ist:
*40*sizeof(char)+11*sizeof(char )
was bestimmt nicht richtig ist.
Danke im voraus
-
grob geschätzt:
texte: sizeof(char) * (40 + 5)
inhalt von tab: 5 * sizeof(char*)
tab: sizeof (char**)
ptab: sizeof (char***)
ppp: sizeof (char***)
-
sizeof(tab) + sizeof(ptab) + sizeof(ppp)
Den Speicherverbrauch der Stringliterale kannst du mit sizeof nicht bestimmen, da dir durch die Array (char[]) nach Zeiger (char*) Umwandlung die benötigten Compilezeitinformationen verlorengehen.