2014-09-30 29 views
3

我尝试尝试交换两个变量中的值时出现分段错误。我代码是:C中的分段错误尝试使用指针交换两个值

我收到以下错误

Before 1,0 
After 0,1 
Segmentation fault (core dumped) 

什么看起来神秘对我来说,价值已成功交换后,正在产生的误差。什么是错误?我需要在任何地方指定指针吗?

+1

这一行:INT *温度;是一个指针,指向啦啦地。那么代码执行:* temp = * a;结果是某些价值已经在'某个'未知的地点加入了记忆。 (可能在你程序的地址范围内,后来内存损坏导致seg错误,用3个xor语句执行交换更好,没有临时变量,只有3条指令,并且不会担心内存损坏 – user3629249 2014-10-01 22:25:57

回答

11

你的指针int *temp;点没有。

因此,当您的程序确实*temp=*a;时,它会将a的值放入随机存储器块中。

试试这个修复:

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

更新

其他问题:

假设我想使用温度为指针变量,而不是作为一个普通 变量,有什么办法让我的程序执行或我需要 离开我的固执?

答:你可以试试这个:

void swap(int *a,int *b){ 
    int *temp; 
    temp = malloc(sizeof(int)); 
    if (temp == NULL) 
     return; 
    *temp=*a; 
    *a=*b; 
    *b=*temp; 
    free(temp); 
} 
+0

假设我想使用'temp'作为指针变量而不是常规变量,有什么办法让我的程序执行或者我需要离开我的固执吗? – Gaurav 2014-09-30 05:26:19

+0

@Gaurav但是你为什么要这么做? – Will 2014-09-30 05:30:36

+0

@llya在使用free(temp )使用temp = NULL,以便它指向没有... – Ajay 2014-09-30 05:32:49

3

swap功能是错误的。它应该是

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

使用此交换功能: -

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