dynamisches Array + NULL-Frage

New C´ler

Cadet 2nd Year
Registriert
Apr. 2006
Beiträge
29
Hallo people´s ;)

hab mal wieder ne kleine Frage...

kay, also das kleine Programm hier....Ablauf is mir klar un wie es was macht...doch ich hab nen Problem mit der if - Schleife...

wann bitte ist denn value gleich NULL ?:rolleyes:
bei welcher Eingabe greift die Schleife oder ist die nur da, um zu überprüfen, das malloc() keinen mist baut?

das könnte auch statt mit arrays mit pointern realisiert werdn, aba is ja hund wie katz

Danke für ne Hilfe.....Gruß :king:


PHP:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void) {
   int *value;
   int size, i = 0;
   printf("Wie viele Werte benötigen Sie : ");
   scanf("%d", &size);
   value = (int *)malloc(size*sizeof(int));
   if( NULL == value ) {
      printf("Fehler bei malloc....\n");
      return EXIT_FAILURE;
   }
   while( i < size ) {
      printf("Wert für value[%d] eingeben : ", i);
      scanf("%d", &value[i]);
      i++;
   }
   printf("Hier Ihre Werte\n");
   for(i=0; i < size; i++)
      printf("value[%d] = %d\n", i, value[i]);

   scanf("%");
   return EXIT_SUCCESS;
}
 
eine variable ist in der regel 0 wenn sie noch nicht benutzt wurde also leer ist ( nicht 0 drin steht sonder "nix")
 
das heißt meinetwegen, wenn kein Speicher im heap mehr frei ist oder eben nicht genügend Speicher vorhanden ist

dann kann "nix" gespeichert werden und die If-Schleife greift.

hab ich das richtig verstanden?
 
Zuletzt bearbeitet:
Aber erst mal prinzipiell ist der Inhalt einer Variablen undefiniert, solange sie nicht initialisiert worden ist. D.h. es ist Zufall was darin steht, abhängig davon was vorher im Speicher an der Stelle lag auf den die Variable zeigt.

Deswegen ist es auch wichtig Variablen zu initialisieren!

Man kann das manchmal umgehen indem man z.B. den Compiler anweist, den kompletten Speicher mit 0 zu initialisieren. Das macht aber nur Sinn wenn man gezwungen ist auf Codegrösse zu optimieren. Korrekt und sicherer ist es jede Variable explizit mit 0 zu initialisieren.

Das malloc liefert NULL zurück wenn es den angeforderten Speicherblock nicht reservieren kann. D.h. nicht unbedingt das kein Speicher mehr vorhanden ist, sondern nur das die angeforderte Grösse am Stück nicht zur Verfügung gestellt werden kann.

MfG

Arnd
 
Zuletzt bearbeitet:
ja genau so dachte ich mir das...also mit nicht genügend Speicher am Stück...

danke nochma jungens :lol:
 
Zurück
Oben