malloc richtig anwenden

sabine02

Grünschnabel
Hallo an alle,

ich bin am Beginn meines Programms und soll entweder Daten von einer Datei einlesen oder die Daten per Tastatur einlesen. Die Eingabedatei sieht beispielsweise so aus:

4 5 1 4
1 2 6
1 3 5
2 3 2
2 4 7
3 4 3

Mein Problem ist (unter anderem;)): Ich möchte das Nullsetzen von capacity in eine eigene Funktion schreiben. Aber es funktioniert irgendwie nicht. Ich bekomme folgende Fehlermeldung:

C:\Users\andrea\Documents\dateneinlesen.c(80): error #2162: Extraneous return value.
C:\Users\andrea\Documents\dateneinlesen.c(88): error #2162: Extraneous return value.
*** Error code: 1 ***

Das ist der Code der funktioniert:
Code:
#include <stdio.h>
#include <stdlib.h> //wird für die Funktion malloc benötigt


//int *queque;
//int visited[3];
//int tail, head;
int number_nodes, number_edges, source, sink;
int **capacity;	
//int **flow;
//int *vorgaenger;

//int minimum (int u, int v);
//int maximum (int a, int b);
//void in_queque (int x);
//int out_queque (void);
//int bfs (int s, int t);


int main(void) {
	
	int i, j, h, k, c, y;
	char eingabe;
	//int max_cap;
	//int max_flow = 0;


	printf("Daten aus Datei (d) oder Daten eingeben (e)\n");

	scanf("%c", &eingabe);//mit %char hats funktioniert geht auch %s
	
		if (eingabe == 'd') {

			FILE*daten = fopen("datenkomb.txt", "r");  
	
			if (daten == NULL)
				fprintf(stderr, "Kann Datei nicht oeffnen\n");
			else		 
				fscanf(daten, "%d %d %d %d", &number_nodes, &number_edges, &source, &sink);
		
			capacity = malloc(number_nodes*sizeof(int*));//oder (int*)malloc(number_nodes*sizeof(int))
		
			if (capacity == NULL) {
				puts("Fehler bei der Speicherzuweisung.");
				return 1;
			}

			for (i=0; i<number_nodes;i++) {
				capacity[i] = malloc((number_nodes)*sizeof(int));

				if (capacity[i] == NULL) {
					puts("Fehler bei der Speicherzuweisung.");
					return 1;
				}
			}	
	

			for (i=0; i<number_nodes; i++) {
				for (j=0; j< number_nodes; j++)
					capacity[i][j] = 0;
			}


			for (i=0; i< number_edges; i++){											//Knoten 1 wird zu Knoten 0 usw.
				fscanf (daten, "%d %d %d", &h, &k, &c) ; 
				capacity[h-1][k-1] = c; 
				printf("%d %d %d \n", h, k, c);
			} 

			fclose(daten);
		}

		for (i=0; i<number_nodes; i++) {
			for (j=0; j< number_nodes; j++){
				printf("%d", i);
				printf("%d",j);
				printf("%d\n",capacity[i][j]);
			}
		}
	//else

}

Das ist der Code mit Funktion:

Code:
#include <stdio.h>
#include <stdlib.h> //wird für die Funktion malloc benötigt


//int *queque;
//int visited[3];
//int tail, head;
int number_nodes, number_edges, source, sink;
int **capacity;	
int **u;
//int **flow;
//int *vorgaenger;

//int minimum (int u, int v);
//int maximum (int a, int b);
//void in_queque (int x);
//int out_queque (void);
//int bfs (int s, int t);
void makezero(int**u, int v, int w); 

int main(void) {
	
	int i, j, h, k, c, y;
	char eingabe;
	//int max_cap;
	//int max_flow = 0;


	printf("Daten aus Datei (d) oder Daten eingeben (e)\n");

	scanf("%c", &eingabe);//mit %char hats funktioniert geht auch %s
	
		if (eingabe == 'd') {

			FILE*daten = fopen("datenkomb.txt", "r");  
	
			if (daten == NULL)
				fprintf(stderr, "Kann Datei nicht oeffnen\n");
			else		 
				fscanf(daten, "%d %d %d %d", &number_nodes, &number_edges, &source, &sink);
		
			
			makezero(capacity, number_nodes, number_edges);


			


			for (i=0; i< number_edges; i++){											//Knoten 1 wird zu Knoten 0 usw.
				fscanf (daten, "%d %d %d", &h, &k, &c) ; 
				capacity[h-1][k-1] = c; 
				printf("%d %d %d \n", h, k, c);
			} 

			fclose(daten);
		}

		for (i=0; i<number_nodes; i++) {
			for (j=0; j< number_nodes; j++){
				printf("%d", i);
				printf("%d",j);
				printf("%d\n",capacity[i][j]);
			}
		}
	//else

		//printf("Eingabe der Daten folgenderweise:\n Anzahl der Knoten Anzahl dder Kanten Quelle Senke\n für i-te Kante:Anfangsknoten Endknoten Kapazität\n zwischen den Werten ein Leerzeichen."); //einlesen von eingabe
		
}



void makezero(int **u, int v, int w) {
	
			int i,j;
			u = malloc(v*sizeof(int*));//oder (int*)malloc(v*sizeof(int))
		
			if (u == NULL) {
				puts("Fehler bei der Speicherzuweisung.");
				return 1;
			}

			for (i=0; i<v;i++) {
				u[i] = malloc((v)*sizeof(int));

				if (u[i] == NULL) {
					puts("Fehler bei der Speicherzuweisung.");
					return 1;
				}
			}	
	

			for (i=0; i<v; i++) {
				for (j=0; j< v; j++)
					u[i][j] = 0;
			}

		}


Danke für eure Hilfe******

lg
Sabine
 
Hallo,

Ich hab jetzt den Code nicht auf seine Funktionalität hin überprüft, aber die Fehlermeldung bekommst du, weil du in einer Funktion mit Rückgabetyp void einen Return-Wert zurückgibst.
 
Hi und Willkommen bei tutorials.de :)

Schreib ans Ende von makezero ein
C++:
return 0;
und ändere den Returntyp von makezero von void auf int.

Gruß
 
Danke für eure schnellen Antworten. Wie ihr seht bin ich Programmierneuling. Hab jetzt die return Werte auf return 0 gesetzt.
Das Programm wird aber nicht ausgeführt. Bekomme folgende Fehlermeldung:
***Process returnes -1073741819***
Danke nochmal******! :)

lg Sabine
 

Neue Beiträge

Zurück