problem mit zeiger und übergabe an funktion



  • huhu
    hab ein problem mit untenstehendem programm ,das compilieren funktioniert ,nur wenn ich dann im programm eine variable eingebe giebt es einen Speicherfehler ,dieser kommt wenn ich den zeiger "anzahl" eingebe ,die variable wird durch die funktion "einlesen" in der funktion "vektoraddition" geschrieben,damit muss das problem irgendwie zusammenhängen ,hat jemand eine ahnung wo der fehler liegt ?

    #include <stdio.h>
    
    void vektoreinlesen(double matrix[10][10],int *anzahl,int *dim)
    {
    	int i,i2;
    	printf ("\nAnzahl der Vektoren: ");
    	scanf ("%i",*anzahl);
    	printf ("\nDimension der Vektoren: ");
    	scanf ("%i",*dim);
    	i=0;i2=0;
    	while (i == *anzahl)
    	{
    		printf ("\n Vektor %i (Werte von oben nach unten): ",i-1);
    		while (i2 == *dim)
    		{
    			scanf ("%lf",&matrix[i2][i]);
    			i2++;
    		}
    		i++;
    	}
    }
    
    void vektoraddition(double matrix[10][10])
    {
    	int anzahl,dim,i,j;
    	double evektor[10]={0,0,0,0,0,0,0,0,0,0};
    	printf ("\n Prozedur fuer Addition von Vektoren wird aufgerufen...");
    	vektoreinlesen(matrix,&anzahl,&dim);
    	/*Rechnung*/
    	for (i=0;i<dim-1;i++)
    	{
    		evektor[i]=matrix[i][0];
    	}
    	for (j=0;j<=anzahl-1;j++)
    	{
    		for (i=1;i<=dim-1;i++)
    		{
    			evektor[i] = matrix[i][j] + evektor[i-1];
    		}
    	}
    	for (i=0;i<dim-1;i++)
    	{
    		printf (" Ergebnisvektor: %lf",evektor[i]);
    	}
    }
    void vektorsubtraktion(double matrix[10][10])
    {
    	int anzahl,dim,i;
    	printf ("\n Prozedur fuer Subtraktion von Vektoren wird aufgerufen...");
    	vektoreinlesen(matrix,&anzahl,&dim);
    }
    
    void vektormultiplikation(double matrix[10][10])
    {
    	int anzahl,dim,i;
    	printf ("\n Prozedur fuer Multiplikation von Vektoren wird aufgerufen...");
    	vektoreinlesen(matrix,&anzahl,&dim);
    }
    
    void skalar(void)
    {
    	printf ("\n Prozedur fuer wird aufgerufen...");
    }
    
    int main()
    {
    int e,wahl;
    double matrix[10][10];
    do
    {
    printf ("\n\n|Programmstart-Vektorrechnung|\n---------------------\n");
    /*--------------------<main>----------------------*/
    printf ("\n Wähle zwischen Vektoren-Rechnung(1) und Vektor-Skalar-Rechnung(2)");
    scanf ("%i",&wahl);
    switch(wahl)
    {
    	case 1:
    		printf ("\nWaehle aus: Vektoraddition(1) Vektorsubtraktion(2) Vektormultiplikation(3)");
    		scanf("%i",&wahl);
    		switch(wahl)
    		{
    			case 1:
    				vektoraddition(matrix);
    				break;
    			case 2:
    				vektorsubtraktion(matrix);
    				break;
    			case 3:
    				vektormultiplikation(matrix);
    				break;
    			default:
    				break;
    		}
    		break;
    	case 2:
    		printf ("\n Wähle aus: ");
    		break;
    }
    
    /*--------------------</main>---------------------*/
    printf ("\nProgramm wiederholen?(1=JA,2=NEIN): ");
    scanf ("%i",&e);
    } while (e==1);
    getch();
    return(0);
    }
    


  • Hallo,

    wenn du das nächste mal postest, bitte bemühe dich, dein Problem so knapp wie möglich zu beschreiben.

    Anyways, ändere das mal so ab:

    void vektoreinlesen(double matrix[10][10],int *anzahl,int *dim)
    {
        [...]
        scanf ("%i",anzahl);  //Der Pointer hat ja als Wert eine Adresse, brauchst also nicht zu Dereferenzieren
    
        [...]
        scanf ("%i",dim);  //Ebenfalls
    }
    

    Den Rest vom Code hab ich nicht gelesen.

    MfG

    GPC



  • aah ,danke
    funktioniert jetzt 🙂


Anmelden zum Antworten