Gau*_*rav 3 c swap pointers segmentation-fault
我试图尝试在两个变量中交换值时遇到分段错误.我的代码是:
void swap(int *a,int *b){
int *temp;
*temp=*a;
*a=*b;
*b=*temp;
}
int main(){
int i=1,j=0;
printf("Before %d,%d\n",i,j);
swap(&i,&j);
printf("After %d,%d\n",i,j);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
Before 1,0
After 0,1
Segmentation fault (core dumped)
Run Code Online (Sandbox Code Playgroud)
对我来说神秘的是在成功交换值后产生错误.什么是虫子?我需要在任何地方对指针进行类型转换吗?
Ily*_*lya 11
你的指针int *temp;什么都没有.
因此,当您的程序执行时*temp=*a;,它会将值a放入随机内存块中.
试试这个修复:
void swap(int *a,int *b){
int temp;
temp=*a;
*a=*b;
*b=temp;
}
Run Code Online (Sandbox Code Playgroud)
更新:
附加问题:
假设我想使用temp作为指针变量而不是常规变量,有没有办法让我的程序执行或者我需要离开我的固执?
答:你可以试试这个:
void swap(int *a,int *b){
int *temp;
temp = malloc(sizeof(int));
if (temp == NULL)
return;
*temp=*a;
*a=*b;
*b=*temp;
free(temp);
}
Run Code Online (Sandbox Code Playgroud)