打印后出现奇怪的分割错误
问题描述:
编写了一个简单的交换程序,效果很好;但是在打印所有内容后给出分段错误.
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 \n",a,b);
swap(&a,&b);
printf("%d %d \n",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;