009
07.10.2004, 22:56 Uhr
Hans
Library Walker (Operator)
|
Hi,
das bei dem einen Programm 4 heraus kommt, erschien mir auch komisch, deshalb hab ichs selber mal ausprobiert. Ergebniss mit diesem Testprogramm:
C++: |
#include <stdio.h> #include <malloc.h>
int main (void) { char *array;
/* int i=99; array = (char*) malloc(i*sizeof(char)); printf ("\nArraysize: %d\n", _msize(array)); */
int i=77; array = (char*) malloc(i*sizeof(char)); printf ("\nArraysize: %d\n", sizeof (array)/sizeof (array[0])); printf ("Arraypointer: %d\n", sizeof (array)); printf ("Array[0]: %d\n", sizeof (array[0]));
printf ("i: %d\n", i);
free (array); }
|
Code: |
D:\borland\CommandLine\own>bcc32 arraysize.c Borland C++ 5.5 for Win32 Copyright (c) 1993, 2000 Borland arraysize.c: Warning W8070 arraysize.c 22: Function should return a value in function main Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
D:\borland\CommandLine\own>arraysize
Arraysize: 4 Arraypointer: 4 Array[0]: 1 i: 77
D:\borland\CommandLine\own>
|
D.h. die Rechnung reduziert sich zu 4/1 was natürlich 4 ergibt; aber das eigentliche Ergebniss ist ja, das sizeof (array) eben nicht die Grösse des arrays liefert, sondern nur die Grösse des Zeigers dahin. Daraus folgt, das Du Dir die Arraygrösse selber merken musst. Das ist imho sowieso eine gute Idee, weil man es hier ja mit dynamischer Speicherverwaltung zu tun hat.
Hans -- Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung. Dieser Post wurde am 07.10.2004 um 22:59 Uhr von Hans editiert. |