You are not logged in.

  • Login

1

Monday, July 6th 2009, 3:32pm

C Problem - Stack arround the variable "A" was Corrupted!?

Hallo Leute ich bräuchte mal einen Rat, und zwar bekomme ich immer diesen Fehler s.Topic.

Es handelt sich bei der Aufgabe um eine 3x3 Reihe Matrize die mit einer anderen Multipliziert werden soll, mir ist alles soweit klar was ich machen muss nur wunder ich mich warum ich immer den Fehler bekomme!?? Könntet ihr mir Weiterhelfen?
DANKE!

Hier der Code


C# Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <cstdio>
 
int main()
{
	double A[2][2], B[2][2];
	char op;
 
	printf("######################################################\n");
	printf("Bitte geben Sie die erste 3x3 Matrize ein.\n");
	scanf("%lf %lf %lf", &A[0][0], &A[0][1], &A[0][2]);
	scanf("%lf %lf %lf", &A[1][0], &A[1][1], &A[1][2]);
	scanf("%lf %lf %lf", &A[2][0], &A[2][1], &A[2][2]);
	printf("\n\n######################################################\n");
	printf("Bitte geben Sie die zweite 3x3 reihige Matrize ein.\n");
	scanf("%lf %lf %lf", &B[0][0], &B[0][1], &B[0][2]);
	scanf("%lf %lf %lf", &B[1][0], &B[1][1], &B[1][2]);
	scanf("%lf %lf %lf", &B[2][0], &B[2][1], &B[2][2]);
 
	printf("\n\n######################################################\n");
	printf("Wählen Sie nun aus welche Operation Sie durchfuehren wollen!\n");
	printf("| Multiplikation = m | Subtraktion = s | Addition = a |!\n");
 
	scanf("%c", &op);
	switch('op')
     {
        case 'm' : printf( "Multi"); 
              break;
 
        case 's' : printf( "Sub" );
	           break;
 
		case 'a' : printf( "Add" );
	           break;
 
	default  : printf( "Leider haben Sie keine Operation ausgewählt!!!" );
     }
 
	return 0;
}



und Gleich nochmal Fix eine weitere Fragen angehangen:

und zwar wenn ich mir eine Funktion erstelle um meine Matrix zu errechnen. Wie kann das Ergebnis dann auch in einer Matrix ausgeben lassen)?

Da ich selbst kaum glaube es so schreiben zu können.

C# Quellcode

1
2
3
4
5
6
double matrizen_multi(double A[2][2], double B[2][2])
{
	return (A[0][0]*B[0][0] + A[0][1]*B[1][0] + A[0][2]*B[2][0]) (A[0][0]*B[0][0] + A[0][1]*B[1][0] + A[0][2]*B[2][0]) (A[0][0]*B[0][0] + A[0][1]*B[1][0] + A[0][2]*B[2][0]);
		    (A[0][0]*B[0][0] + A[0][1]*B[1][0] + A[0][2]*B[2][0]) (A[0][0]*B[0][0] + A[0][1]*B[1][0] + A[0][2]*B[2][0]) (A[0][0]*B[0][0] + A[0][1]*B[1][0] + A[0][2]*B[2][0]);
		    (A[0][0]*B[0][0] + A[0][1]*B[1][0] + A[0][2]*B[2][0]) (A[0][0]*B[0][0] + A[0][1]*B[1][0] + A[0][2]*B[2][0]) (A[0][0]*B[0][0] + A[0][1]*B[1][0] + A[0][2]*B[2][0]);
}



Grüße

This post has been edited 1 times, last edit by "GFXShorty" (Jul 6th 2009, 4:00pm)


2

Monday, July 6th 2009, 4:06pm

Ich vermute scanf schreibt 2 Bytes an die Stelle von &op und überschreibt damit den Zeiger A auf die 3x3 mMatrix

Abgesehen von dem Fehler ist dein switch-Statement falsch: Strings kann man nicht switchen.

3

Monday, July 6th 2009, 4:14pm

So jetzt hab ich das mal geändert, es läuft ein Stück weiter und dann bekomme ich wieder den Fehler!!!


C# Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <cstdio>
 
double matrizen_multi(double A[2][2], double B[2][2]);
 
int main()
{
	double A[2][2], B[2][2];
	int o;
 
	printf("######################################################\n");
	printf("Bitte geben Sie die erste 3x3 Matrize ein.\n");
	scanf("%lf %lf %lf", &A[0][0], &A[0][1], &A[0][2]);
	scanf("%lf %lf %lf", &A[1][0], &A[1][1], &A[1][2]);
	scanf("%lf %lf %lf", &A[2][0], &A[2][1], &A[2][2]);
 
	printf("\n\n######################################################\n");
	printf("Bitte geben Sie die zweite 3x3 reihige Matrize ein.\n");
	scanf("%lf %lf %lf", &B[0][0], &B[0][1], &B[0][2]);
	scanf("%lf %lf %lf", &B[1][0], &B[1][1], &B[1][2]);
	scanf("%lf %lf %lf", &B[2][0], &B[2][1], &B[2][2]);
 
	printf("\n\n######################################################\n");
	printf("Wählen Sie nun aus welche Operation Sie durchfuehren wollen!\n");
	printf("| Multiplikation = 1 | Subtraktion = 2 | Addition = 3 |!\n");
 
	scanf("%d", &o);
 
	switch(o)
     {
        case 1 : printf("Multi\n"); 
              break;
 
        case 2 : printf( "Sub\n" );
	           break;
 
		case 3 : printf( "Add\n" );
	           break;
 
	default  : printf( "Leider haben Sie keine Operation ausgewählt!!!\n" );
     }
 
	return 0;
}

This post has been edited 1 times, last edit by "GFXShorty" (Jul 6th 2009, 4:19pm)


4

Monday, July 6th 2009, 4:30pm

Halt, das Problem kann auch ein anderes sein: Deklarier A und B dochmal als A[3][3] und B[3][3], beim Deklarieren musst du natürlich die Größe angeben und nicht die Indizes

5

Monday, July 6th 2009, 4:49pm

Nur mal aus Interesse in welcher Programmiersprache soll das erstellt werden?
Du hast C# sprich C-Sharp -Tags gewählt für den Quelltext.
Der Header gehört zu C++
printf + scanf deuten auf C hin.

MfG bcc-fan

6

Monday, July 6th 2009, 7:03pm

so fertsch ich habs hinbekommen.. danke allen kann geclosed werden ;)

7

Monday, July 6th 2009, 10:43pm

Es würde eventuell Leuten die nach dem Fehler googlen und auf diesen Thread stoßen, enorm helfen, wenn du sagen würdest was der denn nu Fehler war?

8

Monday, July 6th 2009, 11:59pm

Er sollte je nach Compiler beim 1.Quelltext folgende Fehlermeldung haben:
matrize00.c:24:9: warning: multi-character character constant

Weil er die Warnung nicht verstanden hat ist er auf Zahlen ausgewichen.
Da der Quelltext kurz ist:

C/C++ Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <stdio.h>
 
int main()
{
	double A[2][2], B[2][2];
	char op;
 
	printf("######################################################\n");
	printf("Bitte geben Sie die erste 3x3 Matrize ein.\n");
	scanf("%lf %lf %lf", &A[0][0], &A[0][1], &A[0][2]);
	scanf("%lf %lf %lf", &A[1][0], &A[1][1], &A[1][2]);
	scanf("%lf %lf %lf", &A[2][0], &A[2][1], &A[2][2]);
	printf("\n\n######################################################\n");
	printf("Bitte geben Sie die zweite 3x3 reihige Matrize ein.\n");
	scanf("%lf %lf %lf", &B[0][0], &B[0][1], &B[0][2]);
	scanf("%lf %lf %lf", &B[1][0], &B[1][1], &B[1][2]);
	scanf("%lf %lf %lf", &B[2][0], &B[2][1], &B[2][2]);
 
	printf("\n\n######################################################\n");
	printf("Wählen Sie nun aus welche Operation Sie durchfuehren wollen!\n");
	printf("| Multiplikation = m | Subtraktion = s | Addition = a |!\n");
 
	scanf("%c", &op);
	switch(op)    // hier war der Wurm drin
     {
        case 'm' : printf( "Multi"); 
              break;
 
        case 's' : printf( "Sub" );
	           break;
 
		case 'a' : printf( "Add" );
	           break;
 
	default  : printf( "Leider haben Sie keine Operation ausgewählt!!!" );
     }
 
	return 0;
}


so geht der als C-Quelltext durch ;)
Nicht komplett geprüft!

MfG bcc-fan

Similar threads

Social bookmarks