segmentation fault - C - Programmation
Marsh Posté le 13-04-2006 à 23:35:26
mais pourquoi je devrais les initialiser. est ce que tu peux détailler un peu stp?
Marsh Posté le 13-04-2006 à 23:40:07
oui je sais. mais je ne comprends pas ou est la faute dans mon programme. un pointeur est une variable qui stocke une adresse d'une autre variable
Marsh Posté le 13-04-2006 à 23:43:47
ReplyMarsh Posté le 13-04-2006 à 23:45:27
ReplyMarsh Posté le 13-04-2006 à 23:46:38
skelter a écrit : et tes pointeurs a et b, ils stockent l'adresse de quelle variable ? |
On est encore tombé sur une flèche...
Marsh Posté le 13-04-2006 à 23:46:57
mais moi je dis juste que a et b sont des pointeurs vers deux cases memoires qui contiennent une 2 et l'autre 3.C'est pas possible en C?
Marsh Posté le 13-04-2006 à 23:50:50
skelter a écrit : int a = 2; |
mais meme ca ca ne marche pas, ça génére aussi un seg fault.
Marsh Posté le 13-04-2006 à 23:54:24
mbarekh a écrit : mais meme ca ca ne marche pas, ça génére aussi un seg fault. |
Parce que tu as le même problème de pointeur non initialisé dans ta fonction swap
Code :
|
Marsh Posté le 13-04-2006 à 23:56:47
mbarekh a écrit : mais moi je dis juste que a et b sont des pointeurs vers deux cases memoires qui contiennent une 2 et l'autre 3.C'est pas possible en C? |
Ben non. 2 et 3 sont de expression constantes. elles n'ont pas d'adresse.
Tu veux faire
Code :
|
Reprenons. L'objet du litige est là :
Code :
|
a est une variable non initialisée. OK ?
comme c'est un pointeur, tu le déréférences avec l'opérateur '*' et tu mes une valeur dans la zone pointée.
Code :
|
C'est syntaxiquement correct, mais il y a un hic. Comme la valeur de a est indéterminée, l'opérateur * cherche à atteindre une zone mémoire dont l'adresse est indéterminée. Tu penses que c'est correct ?
Ben non. Ca s'appelle un 'comportement indéterminé' et c'est un sale bug qui peut provoquer n'importe quoi.
Donc, quand des intervenants expérimentés de ce forum te disent qu'il y a un problème avec l'initialisation du pointeur, tu peux le croire et arréter de vouloir faire le malin.
Marsh Posté le 13-04-2006 à 23:57:11
oui ça marche mais je ne comprends pas pourquoi on doit toujours initialiser un pointeur alors qu'il est une variable aussi tout comme "int temp".
Marsh Posté le 14-04-2006 à 00:00:09
merci j'ai tout compris. c'était un cours clair est simple. mais je te jusre que je voulais pas faire le malin, je voulais comprendre une fois pour toute.
Marsh Posté le 14-04-2006 à 00:04:13
mbarekh a écrit : oui ça marche mais je ne comprends pas pourquoi on doit toujours initialiser un pointeur alors qu'il est une variable aussi tout comme "int temp". |
Je viens de te l'expliquer. Si tu ne comprends pas l'explication, pose des questions. Et dans le code corrigé, tu crois que temp n'est pas initialisé ? Et ça ?
Code :
|
c'est de la déco ?
Sinon, ça t'arrive souvent d'utiliser des valeurs indéterminées ?
On pourrait faire ça aussi :
Code :
|
ca fera économiser un fopen() qui ne sert à rien. C'est ça ton raisonnement ?
Marsh Posté le 14-04-2006 à 00:06:38
et si vraiment tu pige pas, l'explication des pointeurs...en vidéo
http://cslibrary.stanford.edu/104/
Marsh Posté le 13-04-2006 à 23:23:58
Bonjour,
est ce que quelqu'un peut me dire pourquoi ce code génére un seg fault?
merci d'avance