C Compiler, Segmentantion fault

John Salatas jsalatas at acn.gr
Sat Mar 31 13:37:57 EEST 2007


Χαιρετώ,

έχω το εξής απλό προγραμματάκι

#include <stdio.h>
#include <stdlib.h>
#include <limits.h>

int main(int argc, char *argv[])
{
	signed short int intSignedShort;
	unsigned short int intUnsignedShort;
	signed long int intSignedLong;
	unsigned long int intUnsignedLong;
	signed int intSigned;
	unsigned int intUnsigned;

	printf("Δώσε τον signed short int (min: %d, max: %d):\t", 
SHRT_MIN, SHRT_MAX);
	scanf("%d", &intSignedShort);
	printf("Δώσε τον unsigned short int (min: %u, max: %u):\t", 0, 
USHRT_MAX);
	scanf("%u", &intUnsignedShort);
//	intUnsignedShort=1;
	printf("Δώσε τον signed long int (min: %d, max: %d):\t", 
LONG_MIN, LONG_MAX);
	scanf("%d", &intSignedLong);
	printf("Δώσε τον unsigned long int (min: %u, max: %u):\t", 0, 
ULONG_MAX);
	scanf("%u", &intUnsignedLong);
	printf("Δώσε τον signed int (min: %d, max: %d):\t", INT_MIN, 
INT_MAX);
	scanf("%d", &intSigned);
	printf("Δώσε τον unsigned int (min: %u, max: %u):\t", 0, 
UINT_MAX);
	scanf("%u", &intUnsigned);
//	intUnsigned=1;

	printf("Ο επόμενος signed short int του %d είναι ο %d\n", 
intSignedShort, intSignedShort+1);
	printf("Ο επόμενος unsigned short int του %u είναι ο %u\n", 
intUnsignedShort, intUnsignedShort+1);
	printf("Ο επόμενος signed long int του %d είναι ο %d\n", 
intSignedLong, intSignedLong+1);
	printf("Ο επόμενος unsigned long int του %u είναι ο %u\n", 
intUnsignedLong, intUnsignedLong+1);
	printf("Ο επόμενος signed int του %d είναι ο %d\n", intSigned, 
intSigned+1);
	printf("Ο επόμενος unsigned int του %u είναι ο %u\n", 
intUnsigned, intUnsigned+1);

	return EXIT_SUCCESS;
}


το κάνω compile 
john at salatas:~/Projects/C/limits> cc limits.c -o limits

και στην εκτέλεση παίρνω τα εξής:
john at salatas:~/Projects/C/limits> ./limits
Δώσε τον signed short int (min: -32768, max: 32767):    1
Δώσε τον unsigned short int (min: 0, max: 65535):       1
Δώσε τον signed long int (min: -2147483648, max: 2147483647):   1
Δώσε τον unsigned long int (min: 0, max: 4294967295):   1
Δώσε τον signed int (min: -2147483648, max: 2147483647):        1
Δώσε τον unsigned int (min: 0, max: 4294967295):        1
Ο επόμενος signed short int του 0 είναι ο 1
Ο επόμενος unsigned short int του 1 είναι ο 2
Ο επόμενος signed long int του 1 είναι ο 2
Ο επόμενος unsigned long int του 1 είναι ο 2
Ο επόμενος signed int του 1 είναι ο 2
Ο επόμενος unsigned int του 1 είναι ο 2
Segmentation fault
john at salatas:~/Projects/C/limits>                                 


Το Segmentation fault γιατί το παίρνω; αν βγάλω το comment σε μία 
από τις 
//	intUnsignedShort=1;
ή 
//	intUnsigned=1;

και βάλω comments αντίστοιχα σε μία από τις
	scanf("%u", &intUnsignedShort);
ή 
	scanf("%u", &intUnsigned);

δεν παίρνω πλέον Segmentation fault.

openSuSE 10.2,  gcc 4.1.3, glibc 2.5

Καμιά ιδέα;

TIA

John Salatas




More information about the Linux-greek-users mailing list