Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » größe eines Arrays ermitteln

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: [ 1 ] > 2 <
010
07.10.2004, 23:15 Uhr
Hans
Library Walker
(Operator)



Zitat von Lensflare:
pfff es liegt nicht an mir, weil ich ein array aus einer anderen quelldatei hab, die ich eingebungen hab. Und ich muss wissen wie gross das (der?) array ist.


Hi,

tja dann wird Dir wohl nix anderes übrig bleiben, als die Arraygrösse "experimentell" zu ermitteln, indem Du das array von Anfang bis Ende durchgehst, und prüfst, ob die Einträge noch sinnvoll sind, oder nicht. Und Du prüfst, ob Du nicht inzwischen in einem Bereich bist, auf den andere Zeiger verweisen. Dabei dann auch immer auf Exceptions achten, die der Prozessor auslöst, d.h. Du wirst einen Exception-handler brauchen...

Zitat:
was passiert eigentlich bei free(array); ??
das array wird doch "gelöscht", aber wenn man die werte darin auslesen würde, bekäme man dann immer 0 ?

Nö. Dann bekommt man irgendwas undefiniertes, oder eine Speicherschutzverletzung. Denn der Speicherbereich, den das array belegte wird mit free() wieder frei gegeben, so das er vom BS anders vergeben werden kann. Dein Programm hat in diesem Speicherbereich also nichts mehr zu suchen, sobald Du ihn freigegeben hast.

Zitat:
Wär nämlich praktisch, weil ich oft alle werte im array auf 0 rücksetzten will

Dazu musst Du aber im Besitz des Speicherbereichs sein, d.h. Deinem Programm muss der Zugriff erlaubt sein.

C++:
free(array);

ist nämlich nicht das Selbe wie

C++:
for (int i=0, i<arraysize; i++)
      array[i] = 0;



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 23:21 Uhr von Hans editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
07.10.2004, 23:38 Uhr
0xdeadbeef
Gott
(Operator)


Was malloc und free angeht - FAQ lesen: www.fun-soft.de/showtopic.php?threadid=4351

Was sizeof angeht, das wird zur Compilezeit aufgelöst.

C++:
char *a;
printf("%d\n", sizeof(a));


Wird die Größe eines char* ausgeben, auf 32bit-Systemen also üblicherweise 4 - was a zugewiesen wurde, steht zur Compilezeit ja u.U. noch gar nicht fest, also kann sizeof es schlecht auflösen. Du musst dir tatsächlich merken, wie viel Speicher du dem Array zugewiesen hast, und die Zahl immer mitschleppen.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
09.10.2004, 18:48 Uhr
Lensflare



Ok, vielen Dank, habt mir wirklich geholfen... jetzt ist alles etwas klarer, vor allem mit free() und wieso mein vorhaben nicht so einfach umgesetzt werden kann.

(sorry dass ich diesen "alten" thread nach oben verschiebe und ihn damit wieder "neu" mache, aber ich wollte mich bedanken.)
--
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)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: