打印后出现奇怪的分段错误
写了一个简单的交换程序,效果很好; 但是在打印完所有内容后会出现分段错误 。
#include 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
我应该简单地忽略这一点并继续前进或者是否有一些非常奇怪的事情发生?
int* temp; *temp = *p1;
在C和C ++中是未定义的行为 ,因为您使用的是未初始化的指针。 (在使用时,指针必须始终指向您拥有的内存,而指针不是)。
使用int temp; temp = *p1;
int temp; temp = *p1;
相反,或者更好的是, int temp = *p1;
这应该工作:
( temp
是一个普通的int
!否则你使用未初始化的指针是未定义的行为)
#include 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; }