Einfache C-Programme verursachen unter Linux einen Speicherzugriffsfehler

Post Reply
Message
Author
Henrik+Kleihe

Einfache C-Programme verursachen unter Linux einen Speicherzugriffsfehler

#1 Post by Henrik+Kleihe »

Hallo.
Ich habe vor kurzen mein gekauftes SuSE Linux 7.2 Professionell mit SuSE Linux 7.3 von einer PC-WELT-CD geupdatet (=> Kernel 2.4.10). Seitdem habe ich folgendes Problem: Wenn ich ganz einfache C-Programm ausführe, wird irgendwann "Segmentation fault" bzw. "Speicherzugriffsfehler" ausgegeben.
Der Quellcode des Programmes ist einwandfrei:
#include <stdio.h>

main()
{
int a, b, summe;
printf("1. Summand: ");
scanf("%i", a);
printf("
2. Summand: ");
scanf("%i", b);
summe=a+b;
printf("
%i %i", a+b, summe);
}


Ich habe das Programm mal im gdb laufen lassen. Nach eingabe von Summand 2 gibt der gdb folgendes aus: "Program received signal SIGSEGV, Segmentation fault.
0x4000b250 in _dl_runtime_resolve () from /lib/ld-linux.so.2"

Was ist das Problem?

Vielen dank im Voraus!

tj

Re: Einfache C-Programme verursachen unter Linux einen Speicherzugriffsfehler

#2 Post by tj »

Hi,

ich denke, dass Dein C-Programm a bzw. b bei dem Aufruf von scanf als Pointer interpretiert (siehe 'man scanf'). Einen Typprüfung kann ja leider nicht stattfinden, da scanf mit einer variablen Liste von Argumenten umgehen muss.Wenn Du also a und b durch &a und &b ersetzt, dann sollte es gehen...

tj

bakunin
Posts: 597
Joined: 16. Aug 1999 6:44
Location: Lorsch (Südhessen)
Contact:

Re: Einfache C-Programme verursachen unter Linux einen Speicherzugriffsfehler

#3 Post by bakunin »

Hi!

> Einen Typprüfung kann ja leider nicht stattfinden, da scanf mit einer variablen Liste von Argumenten umgehen muss.

Das stimmt so nicht. GCC erlaubt __attribute__ Angaben in Funktionbsdeklarationen, die es dem Compiler ermöglichen, eine entsprechende Prüfung vorzunehmen. Allerdings müsste man auch noch die Warnungen des Compilers aktivieren, sonst gibt er keine aus. <img src="http://www.pl-forum.de/UltraBoard/Images/Wilk.gif" border="0" align="middle">

Cheers,
GNU/Wolfgang

User avatar
heinrich
Posts: 219
Joined: 22. Sep 1999 11:22
Location: N49.137 E8.544

Re: Einfache C-Programme verursachen unter Linux einen Speicherzugriffsfehler

#4 Post by heinrich »

und jetzt noch ein #include und return und den Funktionsheader von main() korrekt geschrieben...
<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">
#include <stdio.h> // scanf

int main(void)
{
int a;
int b;
int summe;

printf("1. Summand: ");
scanf("%i", &a);

printf("2. Summand: ");
scanf("%i", &b);

summe=a + b;
printf("%i + %i = %i", a, b, summe);

return 0;
}
</font><hr></pre></blockquote>

User avatar
heinrich
Posts: 219
Joined: 22. Sep 1999 11:22
Location: N49.137 E8.544

Re: Einfache C-Programme verursachen unter Linux einen Speicherzugriffsfehler

#5 Post by heinrich »

oder mit C++ <img src="http://www.pl-forum.de/UltraBoard/Images/Wilk.gif" border="0" align="middle">

<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">
#include <iostream> // cin, cout, endl

using namespace std;

int main(void)
{
int a;
int b;
int summe;

cout << "1. Summand: ";
cin >> a;

cout << "2. Summand: ";
cin >> b;

summe=a + b;
cout << a << " + " << b << " = " << summe << endl;

return 0;
}
</font><hr></pre></blockquote>

Henrik Kleihe

Re: Einfache C-Programme verursachen unter Linux einen Speicherzugriffsfehler

#6 Post by Henrik Kleihe »

Ach ja, stimmt.
Danke!

Post Reply