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

2022-01-12 00:00:00 c segmentation-fault c++

写了一个简单的swap程序,效果不错;但是在打印完所有内容后会出现Segmentation Fault.

Wrote a simple swap program, works well; But gives a Segmentation Fault after printing everything.

#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 
",a,b);
    swap(&a,&b);    
    printf("%d %d 
",a,b);

    return 0;
}

输出:

9 8  
8 9  
Segmentation fault

我应该忽略这一点并继续前进,还是真的发生了什么奇怪的事情?

Should I simply ignore this and move forward or is there something really strange going on ?

推荐答案

int* temp;*temp = *p1;

在 C 和 C++ 中是 未定义的行为,因为您使用的是未初始化的指针.(在使用时,指针必须始终指向您拥有的内存,而您的指针不是).

is undefined behaviour in C and C++ as you are using an uninitialised pointer. (At the point of use, a pointer must always point to memory that you own, and your pointer isn't).

使用 int temp;temp = *p1; 取而代之,或者更好的是 int temp = *p1;

Use int temp; temp = *p1; instead, or better still, int temp = *p1;

相关文章