Von Funkton --> Zeiger ---> an neue FUnktion übergeben ---> Programm absturz
-
Hi
ich habe ein Problem und zwar habe ich zwei Funktion. in der einen erzeuge ich ein malloc array und gebe dann über einen zeiger der auf den anfang von dem malloc zeigt aus der funktion zurück das funktiniert auch gebe mir als test mit ner printf den inhalt des zeigers ausserhalb der funktion wieder das stimmt überein. nun will ich diesen zeiger in eine neue funktion einlesen und dann stürtzt das programm ab sobald diese funktion aufgerufen wird.
#include<stdio.h> #include<stdlib.h> // Globale Variablen int matrixVorhanden = 0; int ordnungVorhanden = 0; int matrixOrdnung () { int ordnung = 0; printf("\nMenue 1) Ordnung der Matrix"); printf("\n\nBitte geben Sie die Ordnung der zu berechnenden Matrix ein!\n"); printf("Ordnung:"); scanf("%d",&ordnung); printf("\n\nIhre Matrix entspricht der Ordnung %d\n\n",ordnung); ordnungVorhanden = 1; return ordnung; } float *matrixEingabe (int ordnung) { int size,i,temp1,temp2; float *matrix; temp1 = 0; i = 0; size = ordnung * ordnung; matrix = (float *)malloc(size*sizeof(float)); printf("\n\nBitte geben Sie die Werte fuer die %dx%d Matrix ein",ordnung,ordnung); printf("\nBeispiel fuer eine 3x3 Matrix (Ordnung 3):\n"); printf("\t\n[0] [1] [2]"); printf("\t\n[3] [4] [5]"); printf("\t\n[6] [7] [8]"); if ( matrix == NULL ) { printf("\n\nSpeicherüberlauf in Funktion \"matrixEingabe\" "); } while (i < size) { printf("\nWert fuer matrix[%d] eingeben:",i); scanf("%f",&matrix[i]); i++; } printf("\n\nIhre Eingegebene Matrix lautet:\n\n"); for(i=0; i < size; i++) { printf("[%.2f]\t",matrix[i]); temp1++; temp2 = temp1%ordnung; if (temp2==0) { printf("\n"); } } matrixVorhanden = 1; return (matrix); } float matrixDeterminante (float *zgrMatrix, int ordnung) { float determinante; /* for (i=0;i<ordnung;i++) { printf("%f ",*zgrMatrix); } */ printf("\nZeiger Position %f",*zgrMatrix); if (ordnung==1) { determinante = *zgrMatrix; } return (determinante); } int auswahlUeberpruefung (int menueAuswahl, int ordnung) { float *zgrMatrix, determinante; if (menueAuswahl==1) { ordnung = matrixOrdnung(); } if (menueAuswahl==2 && ordnungVorhanden==1) { zgrMatrix = matrixEingabe(ordnung); printf("\nZeiger Position %f",*zgrMatrix); } if (menueAuswahl==2 && ordnungVorhanden==0) { ordnung = matrixOrdnung(); zgrMatrix = matrixEingabe(ordnung); printf("\nZeiger Position %f",*zgrMatrix); } if (menueAuswahl==3 && matrixVorhanden==1) { determinante = matrixDeterminante(zgrMatrix, ordnung); printf("Determinante = %f",determinante); } return ordnung; } int main() { int menueAuswahl ,ordnung; menueAuswahl = 0; ordnung = 0; printf("\nWillkommen zum Aufgabenblatt 7!"); printf("\n-------------------------------"); do { printf("\nAufgaben Menue"); printf("\n----------------------------------------------------\n"); printf("\n1) Ordnung der Matrix \t 4) Matrix A Invertieren"); printf("\n2) Matrix A eingeben \t 5) Ein LGS Ax=b loesen"); printf("\n3) det(A) berechnen \t 6) Programm Beenden"); printf("\n\n----------------------------------------------------\n"); printf("Bitte geben Sie Ihre benoetigte Operation ein! ( 1 - 6 )\n"); printf("\nAuswahl:"); scanf("%d",&menueAuswahl); ordnung = auswahlUeberpruefung(menueAuswahl, ordnung); }while(menueAuswahl!=6); return 0; }
bitte um hilfe
-
1. Verwende Satzzeichen
2. Verwende einen Debugger
3. Welche Funktion funktioniert denn nicht und an welcher Stelle? Bau doch ein möglichst kleines Beispiel wo dieses Problem auftritt.