Δημοσιεύτηκε: 07 Σεπ 2011, 11:55
από migf1
Star_Light έγραψε:
Spoiler: show
Κώδικας: Επιλογή όλων
#include<stdio.h>

int main()

{
int x,y;
x=1 , y =2;

int *p1 , *p2 , *p3;

p1=&x , p2=&y , p3=NULL;

if(p1)
{
printf("\n The pointer 1 exists");
printf("\nAnd his value is: %d",*p1);
}
else
printf("The pointer 2 does not exist");


if(p2)
{
printf("\n The pointer 2 exists");
printf("\nAnd his value is: %d",*p2);
}
else

printf("The pointer 2 does not exist");


if (p3)
{
printf("\nThe pointer 3 exists");
printf("\nAnd his value is: %d",*p3);
}
else
printf("\nThe pointer 3 does not exist");

return 0;
}


Στο μεταξυ εδω δεν θα μπορουσε να φαει segm fault??? λεω στο 3ο if γιατι ουσιαστικα ενω τον εχω σαν NULL παω να τον προσπελασω κατα τα αλλα μου εμφανιζει κανονικα πως ο δεικτης δεν υπάρχει :D

Όχι δεν θα μπορούσε να φάει seg-fault, για αυτό δεν τρώει κιόλας :)

Το if ( p3 ) που ισοδυναμεί με if ( p3 != NULL ) εξασφαλίζει πως όταν ο p3 είναι NULL η ροή ΔΕΝ μπαίνει στο σώμα του if, στο οποίο σώμα χρησιμοποιείς τα περιεχόμενα του p3 στο 2ο printf... εκείνο το *p3 δηλαδή.

έγραψε:
εΠΙΣΗς αν βαλω

Κώδικας: Επιλογή όλων

if(*pn) // οπου n ειναι ο αριθμος σε ολους τους δεικτες για n=1,2,3 δηλαδη


τοτε τρωω ακριβως ενα seg fault στο σημειο 3 αλλα φυσικα δεν μου εμφανιζει και το σημειο 2 παρα μονο το σημειο 1 μου εμφανιζει μαζι με την τιμη του 1 και απλα μου λεει οτι το 2 υπάρχει κουλο ε??? τελοςπαντων παω να την πεσω καληνυχτα!!!!

Και πολύ σωστά τρως seg-fault αφού στο if χρησιμοποιείς τα περιεχόμενα του p3 ( *p3 σημαίνει τα περιεχόμενα του p3) χωρίς να έχεις εξασφαλίσει πρώτα πως ο p3 έχει όντως περιεχόμενα. Οπότε όταν ο p3 είναι NULL (δλδ δεν έχει περιεχόμενα) το if ( *p3 ) προκαλεί seg-fault.