000
10.06.2005, 22:37 Uhr
Lensflare
|
hallo
also ich hab mir die FAQ hier über malloc durchgelesen und ich glaube es verstanden zu haben, aber bei meien testcode kommen dennoch unerwartete sachen:
C++: |
int *intArray;
intArray = (int*)malloc(sizeof(int)*10); intArray[9] = 9;
printf("intArray[9]: %i\n",intArray[9]); printf("Anzahl Slots: %i\n", sizeof(intArray)/sizeof(int));
|
Wieso kommt bei "Anzahl Slots" eine 1 raus und nicht 10, wie erwartet? Mir ist klar, dass das array ein zeiger ist, aber ich verstehe es trotzdem nicht, weil ich doch mit malloc 10*int bytes für das array reserviere.
C++: |
int *intArray; intArray = (int*)malloc(sizeof(int)*10);
intArray[9] = 9; printf("intArray[9]: %i\n",intArray[9]);
intArray[17] = 17; printf("intArray[17]: %i\n",intArray[17]);
|
Hier scheint das programm garnichts dagegen zu haben, dass ich ausserhalb des angeforderten speichers schreibe und lese, es kommt auch noch wirklich 17 raus
dann ist noch diese komische sache:
C++: |
//Nachtrag: int *intArray = (int*)malloc(sizeof(int)*10); free(intArray); int *buffer = (int*)malloc(sizeof(int)*10); free(intArray); free(buffer); //Nachtrag Ende
int *testArray; int *testArray2;
testArray = (int*)malloc(sizeof(int)*10); testArray[5] = 1; testArray2 = (int*)malloc(sizeof(int)*10); testArray2[5] = 2; printf("%i\n",testArray[5]); //Anmerkung: testArray[5], nicht testArray2[5]
|
wieso wird der wert 2 aus dem testArray2 ausgegeben, statt dem wert 1 aus testArray ??? es scheint so, als würde testArray2 einfach den speicherblock von testArray bekommen, statt einen anderen... aber wieso?
EDIT: jedoch nur wenn vorher das kommt, was ich mit "//Nachtrag" markiert habe -- Wenn das Gehirn so einfach wäre, dass wir es verstehen könnten, wären wir so einfach, dass wir es nicht verstehen könnten. (Emerson Pugh Trost) Dieser Post wurde am 10.06.2005 um 23:01 Uhr von Lensflare editiert. |