打印后出现奇怪的分段错误

时间:2014-11-17 09:00:27

标签: c++ c segmentation-fault

写了一个简单的交换程序,效果很好;但在打印完所有内容后会出现分段错误

#include <stdio.h>

void swap(int* p1,int* p2){

    int* temp;
    *temp = *p1;
    *p1 = *p2;
    *p2 = *temp;
}

int main(){ 

    int a,b;
    a = 9; b = 8;
    printf("%d %d \n",a,b);
    swap(&a,&b);    
    printf("%d %d \n",a,b);

    return 0;
}

输出:

9 8  
8 9  
Segmentation fault

我应该忽略这一点并继续前进或者是否有一些非常奇怪的事情发生?

2 个答案:

答案 0 :(得分:3)

int* temp; *temp = *p1;

当您使用未初始化的指针时,

在C和C ++中是未定义的行为。 (在使用时,指针必须始终指向您拥有的内存,并且指针不是。)

改为使用int temp; temp = *p1;,或者更好,int temp = *p1;

答案 1 :(得分:0)

这应该有效:

temp是正常的int!否则你使用未初始化的指针是未定义的行为)

#include <stdio.h>

void swap(int* p1,int* p2){

    int temp;
    temp = *p1;
    *p1 = *p2;
    *p2 = temp;

}

int main(){ 

    int a = 9, b = 8;

    printf("%d %d \n",a,b);
    swap(&a, &b);    
    printf("%d %d \n",a,b);

    return 0;
}