malloc problem

Manda

Erfahrenes Mitglied
Hallo leute,
hab mal wieder frage(n). versuche einfach nur folgendes:
temperaturen für einen tag einlesen. 1tag hat 3temperaturen
ich muss den benutzer abfragen, wieviele tage er eingeben möchte und dann den speicher allokieren.
leider klappt es mit dem einlesen der Werte nicht so.
Mein Code bis jetzt:
C++:
#include <stdio.h>
#include <stdlib.h>

#define WERTE 3

int main(void)
{
	double *pwerte    = NULL;
   double *sichern   = NULL; // für späteres realloc
   int werte         = 0;
   int werte_pro_tag = 3;
   int tage          = 1; // Wert wurde bereits abgefragt.
   int i             = 0;
	int j             = 0;
	int k             = 0; 
	
	printf("F\201r wieviele Tage sollen die Messdaten eingelesen werden?");
	printf("\nIhre eingabe: ");
	scanf("%d", &tage);
	printf("\n");
	

	if( NULL == (pwerte = malloc ( tage * werte_pro_tag * sizeof (double))))
	{
		printf("\nEs konnte kein Speicher reserviert werden!");		
		exit(1);	
	}	

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

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

sobald ich einen Wert eingebe, stürzt das programm ab(runtime-error)
leider find ich den fehler nicht, hoffe ihr könnt mir dabei helfen!!
danke schonmal!!

gruß
manda
 
WElche IDE/Compiler nutzt du den?also sowohl unter CodeBlocks(MinGW) und VC8 Express funktionierte es. Ich musste aber einen extra cast machen nach dem malloc():

(double*)malloc(...)


Aber ansonsten waren überall sinvolle daten drin
 
@SGSSGene ich benute VS6.0 ist ziemlich alt ich weis...kann es denn daran liegen
ich hab jetzt einfach eine double variable dazu deklariert
double irgendndwas = 1.0;
und dann gestartet, dann läuft es auch wunderbar...komischer weise
naja wie dem auch sei...versuche jetzt gerade den durchschnitt zu berechnen,
da meckert er allerdings schon wieder rum...
hättest da eine idee

danke und gruß
manda
 
Ich denke mal das es so richtig wäre:


Code:
pwerte = (double*)malloc (tage * werte_pro_tag * sizeof (double));


Liebe Grüße
Bexx
 
@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:
 
Hi.
Ich denke mal das es so richtig wäre:

Code:
pwerte = (double*)malloc (tage * werte_pro_tag * sizeof (double));
Das kommt auf die Sprache an. Vom Stil her würde ich eher vermuten, das es C ist (Verwendung von malloc/free statt new/delete usw.)

Falls es C++ sein soll, dann muss man casten, sollte allerdings einen new-style C++ Cast verwenden. Falls es sich um C Code handelt, sollte man besser nicht casten, dann ist der Code so korrekt wie gehabt.

Den Fehler kann ich jetzt auch nicht nachvollziehen. Bist du denn auf den VC++ 6 angewiesen? Wenn nicht, nimm einen anderen Compiler.

Ist das denn dein konkretes Programm oder hast du das etwas vereinfacht?

Gruß

PS: @Manda: Bitte achte mal auf die Netiquette, insbesondere Punkt 15. Danke!
 
Ich muss mir das gleich mal genauer angucken, bin jetzt nur so dran vorbei geflogen,
was mir aber zuerst in den Sinn kam auf Grund des Ergebnisses das du genannt hast ist, dass du nicht versuchen solltest zwei verschiedene Datentypen zu mischen bei deiner Rechnung
Code:
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);

Welchen Datentyp hat summe und welchen Datentyp hat pwerte?
Dann ist die Frage in welchen Datentyp willst du das Ergebnis speichern
Dieses Problem kannst du durch einen Cast evtl lösen.
 
Zuletzt bearbeitet:
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:

Ich hab es mir genauer angesehen und ich denke es liegt an deinen Datentypen,
zum Bsp. machst du oben bei der Ausgabe %d (einen Integer-warum? Summe ist doch bestimmt ein double, oder?)
Am besten stellst du mal deinen kompletten Code ein, dann ist es leichter ihn zu überarbeiten.


EDIT:
Hold your horses....:)
Hast du Speicher reserviert für summe?
Wenn nicht, dann versuchst du nämlich eine Adresse zu addieren und teilen, was natürlich kompletter Blödsinn wäre...
 
Zuletzt bearbeitet:
hier der code
C++:
#include <stdio.h>
#include <stdlib.h>

#define WERTE 3

int main(void)
{
	double *pwerte    = NULL;
   double *sichern   = NULL; // für späteres realloc
   int werte         = 0;
   int werte_pro_tag = 3;
   int tage          = 1; // Wert wurde bereits abgefragt.
   int i             = 0;
	int j             = 0;
	int k             = 0; 
	double summe		= 0.0;

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

	if( NULL == (pwerte = (double*)malloc ( tage * werte_pro_tag * sizeof (double))))
	{
		printf("\nEs konnte kein Speicher reserviert werden!");		
		exit(1);	
	}	

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

	for(i=0; i<=k; i++)
	{
		summe+=pwerte[i];
		//printf("%lf, %d\n",summe,pwerte[i]);
   }
 
	summe/=k;
   printf("Durchnittstemperatur \201ber %d Tage: %lf", k/3, summe);


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

speicher für summe hab ich nicht reserviert...könnte wohl daran liegen
 

Neue Beiträge

Zurück