malloc problem

Wenn Tage ein Array ist, dann hast du ja als du die letzten Werte eingegeben hast, eine Schleife mit einem Zähler benutzt. Diesen Zähler kannst du immer noch benutzen, das könnte so aussehen:
Wenn "i" dein Zähler aus deiner alten Schleife ist:

Code:
neueAnzahlTage+= (i-1)
for (x = (i-1); x < neueAnzahlTage;x++)
{
    scanf("%lf", &tage[x]);
}
 
Zuletzt bearbeitet:
@Bexx jop hab ich korrigiert, hatte es ausversehen gelöscht glaub ich
kurz zur durchschnittsberechnung
C++:
for(i=0; i<=k; i++)
	{
		summe+=pwerte[i];
		//printf("%d, %d\n",summe,pwerte[i]);
   }
 
	summe/=k;
   printf("Durchnittstemperatur \201ber %d Tage: %d", k/3, summe);

irgendwie kriege ich bei summe immer 0 raus, sonst immer eine große negative zahl wie: -23318333 irgendwie sowas :confused:


Sorry hierauf !

Code:
summe += (double)pwerte[i];


Gruß muephil
 
Sorry hierauf !
@Bexx jop hab ich korrigiert, hatte es ausversehen gelöscht glaub ich
kurz zur durchschnittsberechnung
C++:
for(i=0; i<=k; i++)
	{
		summe+=pwerte[i];
		//printf("%d, %d\n",summe,pwerte[i]);
   }
 
	summe/=k;
   printf("Durchnittstemperatur \201ber %d Tage: %d", k/3, summe);

irgendwie kriege ich bei summe immer 0 raus, sonst immer eine große negative zahl wie: -23318333 irgendwie sowas :confused:

Code:
summe += (double)pwerte[i];
Das Problem ist doch aber längst gelöst :confused:

Außerdem gibt es keinen Unterschied zwischen deinem Code und dem Code vorher - außer das du noch einen unnötigen Cast machst...

Gruß
 
Hallo Leute,
tut mir leid das ich wieder das alte Thema aufgreife, aber ich habe dass Problem leider nicht lösen können und bin am verzweifeln!!
"Bexx" hatte mir einen bsp Code mal gegeben, den ich auch versucht habe umzusetzen. Allergings bekomme ich bei meinem Programm immer einen "runtife-error".

Ich würde gerne meinen Code posten wollen:
C++:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <malloc.h>

int main(void)
{
	double *temp      = NULL;
	double *sichern   = NULL;//für realloc zum zwischenspeichern
	double *luft		= NULL;   
   int werte         = 0;
   int werte_pro_tag = 3;
   int tage          = 1; 
   int i             = 0;
	int j             = 0;
	int k             = 0; 
	double summeT     = 0.0;   
	double summeL		= 0.0;

	printf("F\201r wieviele Tage sollen die Messdaten eingelesen werden?");
	printf("\nIhre eingabe: ");
	scanf("%d", &tage);
	printf("\n");	

	//Speicher für Temperaturen reservieren
	if( NULL == (temp = (double*)malloc(tage * werte_pro_tag * sizeof(double))) )
	{
		printf("\nEs konnte kein Speicher reserviert werden!");		
		exit(1);	
	}	
	//Speicher für Luftdruck reservieren
	if( NULL == (luft = (double*)malloc(tage * sizeof(double))) )
	{
		printf("\nEs konnte kein Speicher reserviert werden!");		
		exit(1);	
	}

	for(i=0; i<tage; i++)
   {
		printf("\nTag: %d\n", i+1);
		
		for(j=0; j<werte_pro_tag; j++, k++ )
      {
			printf("  Temperatur %d: ", j+1 );
         while( 1 != scanf ( "%lf", &temp[k] ))
         {
				puts("Fehler in der Eingabe, bitte wiederholen!");
            while(getchar () != '\n');//puffer leeren
         }			
         while(getchar () != '\n');
      }		
		printf("     Luftdruck: ");
		scanf("%lf", &luft[i]);
   } 	

	for(i=0; i<=k; i++)//durchschnitt Temperaturen
	{
		summeT += temp[i];	
   }
	
	for(i=0; i<tage; i++)//durchschnitt Luftdruck
	{
		summeL += luft[i];
	}
 
	summeT /= k;
	summeL /= (k/3);
   
	printf("\nDurchnittstemperatur \201ber %d Tag(e): %f", k/3, summeT);
	printf("\nDurchnittsluftdruck  \201ber %d Tag(e): %f", k/3, summeL);
	
	//Hier abfragen ob noch ein weiterer Tag eingegeben werden soll
	printf("\n\n");
	printf("Wollen Sie weitere Tage eingeben[j/n]?");
	if('j' == getch())
	{
		printf("\n\nF\201r wieviele Tage sollen die Messdaten eingelesen werden?");
		printf("\nIhre eingabe: ");
		scanf("%lf", &tage);
		
		if( NULL == (temp = (double*)realloc(temp, _msize(temp) + werte_pro_tag * tage * sizeof(double)) ))
		{
			printf("\nEs konnte kein Speicher reserviert werden!");					
			exit(1);	
		}
		printf("\nNeuer Speicher ist reserviert!");		
		
		//Hier neue Daten einlesen...
	}
	else
	{
		printf("\n***Der reservierte Speicherplatz wurde wieder freigegeben***");
		printf("\n***Das Programm wird beendet***");
	}
	
	free(temp);
	free(luft);
	//free(sichern);

	printf("\n\n");
	return 0;
}

Das Problem ist nachwievor beim "realloc". Ich krieg das einfach nicht hin, dort die weiteren Tage einzulesen. Ich bin mit meinen Ideen am Ende. Er zählt die Tage nicht weiter und falls doch, dann gibts komischer Weise einen "runtime-error".

Hättet ihr eine idee wie ich das "realloc" verwenden könnte (also dort die neuen Tage einlesen)
Danke schonmal im Vorraus!!

Gruß
Manda
 
warum versuchst du es denn nicht mal mit malloc, statt mit realloc?
 
@Bexx ich muss beides im Code haben. Erst mit malloc speicher holen, Daten einlesen und berechnen.
Danach mit "realloc" neuen speicher holen und dann nochmals Daten einlesen.
Ich stecke gerade beim "realloc". Dort habe ich versucht mit scanf was einzulesen, aber das klappte leider nicht. Sobald ich was eingab, bekam ich einen runtimerror :confused:

C++:
if( NULL == (temp = (double*)realloc(temp, _msize(temp) + werte_pro_tag * tage * sizeof(double)) ))
        {
            printf("\nEs konnte kein Speicher reserviert werden!");                
            exit(1);   
        }
        printf("\nNeuer Speicher ist reserviert!");    
       
        //Hier neue Daten einlesen...HIER KOMME ICH NICHT WEITER

@sheel: Das Programm läuft, wenn ich den einleseteil beim "realloc" weglasse. Sobald ich da irgendwas mit scanf mache, bekomme ich Fehler.
Ich verwenden VC++ 6.0 (viele abstürze mit dem gehabt).

Deswegen meine Frage an euch, ob ihr mir da helfen könntet? Mir fehlt nur der Teil mit dem einlesen der neuen Tage.
Ich kann erst Tage eingeben, dass klappt wunderbar ohne Fehler. Aber danach muss der Benutzer nochmals gefragt werden, ob er noch Tage eingeben will. Falls ja, dann mit "realloc" speicher holen und Werte einlesen. Genau hier stehe ich auf dem Schlauch...
Hoffe ihr könnt mir da raus helfen

Gruß
Manda
 

Neue Beiträge

Zurück