malloc problem



  • oh du meinst ich müsste dann einen neuen zeiger definieren und dort die weiteren tage speichern??
    also: double *sichern = NULL;
    aber müsste ich nicht hier auch mit malloc arbeiten?? oder könnte ich auch realloc verwenden?
    weil ich eigentlich dachte, das ich mit realloc einfach neuen speicher dazu holen kann(was ich eigentlich auch soll, also realloc verwenden), und dann auf *temp die nächsten tage speichern kann...
    oder seh ich das falsch??



  • MandaJohn schrieb:

    oder seh ich das falsch??

    nee, das stimmt schon. mit 'realloc' kannste was dranhängen, allerdings kann's auch schiefgehen. deshalb nicht so:

    void *p = malloc(...);  
    ...
    p = realloc (p, ...);   // wenn realloc fehlschlägt ist dein pointer futsch
    

    sondern so:

    void *p = malloc(...); 
    void *q;                // zwischenspeicher für realloc
    ...
    q = realloc (p, ...);   // versuch noch was dranzuhängen
    if (q)
       p = q;               // hat geklappt
    

    🙂



  • @+fricky
    du meinst es so:

    if('j' == getch())
    {
          scanf("%lf", &tage);
    //sichern ist neuer pointer, und temp war der alte wo die ersten Tage drin sind
          if( NULL == (sichern = (double*)realloc(temp, _msize(temp) + werte_pro_tag * tage * sizeof(double)) ))
          {
    	printf("\nEs konnte kein Speicher reserviert werden!");		
    	exit(1);	
          }
    	temp = sichern;
    }
    else
    {
    printf("\n***Der reservierte Speicherplatz wurde wieder freigegeben***");
    printf("\n***Das Programm wird beendet***");
    }
    

    ich hoffe ich versteh es jetzt richitg???

    /Edit: was könnte denn der Grund sein das "realloc" nicht klappt? das man nicht genügend RAM hat?? oder auch was anderes??



  • MandaJohn schrieb:

    /Edit: was könnte denn der Grund sein das "realloc" nicht klappt? das man nicht genügend RAM hat?? oder auch was anderes??

    alles mögliche. über den grund schweigt sich realloc leider aus. sogar 'malloc' selbst kann scheitern.
    🙂



  • Big Brother schrieb:

    Das hier:

    _msize(temp)

    funktioniert nicht.

    Ohoh, Bruder. Guckst du MSDN, dann siehst du es geht doch.
    Die Funktion kannte ich bisher gar nicht.
    :p



  • @B.B
    Entschludige, aber ich bin gerade nicht bisschen schlauer geworden.
    _msize(temp) geht nicht? damit wollte ich eigentlich nur die größe ermitteln, die schon reserviert ist.
    Um dann was dazu hängen.
    Aber ich google mal...



  • MandaJohn schrieb:

    @B.B
    Entschludige, aber ich bin gerade nicht bisschen schlauer geworden.
    _msize(temp) geht nicht? damit wollte ich eigentlich nur die größe ermitteln, die schon reserviert ist.
    Um dann was dazu hängen.
    Aber ich google mal...

    Nö, ich habe mich geirrt. _msize geht, ich kannte die Funktion bisher nicht.



  • Leute ich will ja nicht nerven, aber leider stecke ich noch beim Einlesen der Werte. Irgendwie will das ding nicht.
    Könntet ihr mir sagen obs denn so richtig ist, realloc zu verwenden(4 posts weiter oben der code)??
    Ich komme irgendwie nicht drauf, wie das ding dann die Tage weiter zählen kann und ich da neue Werte einlesen könnte?? 😕

    Danke schonmal!



  • Das wird wie ein Array eingelesen, wie gehabt. Einfach mit dem Index weitermachen, mit dem du aufgehört hast. D.h. Index speichern oder über _msize berechnen.



  • Big Brother schrieb:

    Nö, ich habe mich geirrt. _msize geht, ich kannte die Funktion bisher nicht.

    ich auch nicht, aber das ist auch keine standard-funktion, sondern irgend so eine m$-windows-spezialität.
    🙂


Anmelden zum Antworten