写了一个简单的交换程序,效果很好;但在打印完所有内容后会出现分段错误。
#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
我应该忽略这一点并继续前进或者是否有一些非常奇怪的事情发生?
答案 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;
}