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