2015-10-15 112 views
-1

为什么此代码显示分段错误(核心转储)?C分段错误(核心转储)错误

#include<stdio.h> 

void swap(int*,int*); 

int main(){ 
    int x=5,y=10; 
    swap(&x,&y); 
    printf("%d%d",x,y); 
    return 1; 
} 

void swap(int *a,int *b){ 
    int *temp; 
    *temp = *a; 
    *a = *b; 
    *b = *temp; 
} 
+1

请缩进代码 –

+1

的[用于分割故障的常见原因的定义列表]可能的复制(http://stackoverflow.com/questions/ 33047452 /常见问题解决方案清单) – CodeMouse92

回答

4

int *temp;是问题所在。它并不指向你拥有的任何记忆。取消引用temp上的行为未定义。

使用int temp;代替,(优选int temp = *a;从那时起temp是从来没有在一个未初始化状态)和temp而非*temp在作业。

(顺便说一句,0通常从main返回值,表示成功。)

+0

感谢您的回复。现在我明白了这个概念。很好地由你解释。 – shahbaz17

2

在掉期()函数,你声明一个指针(INT *温度)和刚过取消引用它使用(* temp = ...)。在初始化temp中不包含任何内容(很好,可能是0,但无论如何),'* temp'是指“包含在temp中的地址处的整数”。

这里要操纵一个int:

void swap(int *a, int *b) { 
    int temp; 
    temp = *a; 
    *a = *b; 
    *b = temp; 
} 
+0

感谢您的回复 – shahbaz17

0
`int *temp;` 

这种说法只是创建一个指向整数。因此,之前

*temp = *a; 

您需要分配一个内存,temp将指向。否则temp会有一些垃圾值,这会使它成为一个随机位置的指针。所以,如果你正在使用int *temp然后使用前分配内存,或者您可以使用int变量int temp;

+0

感谢您的回复。 – shahbaz17