我不知道这里发生了什么:
#include<stdio.h>
int main()
{
int i, j, *k, x,array[]={5,3,4,1,8,9,2,7,6,0};
int *ptr=array;
for(j=1;j<10;j++) {
printf("---------iteration %d--------------\n",j);
*k=*(ptr+j); // the segmentation error is occurring here at this line
printf("key=%d\n",*k);
i=j-1;
while( i>=0 && *k < *(ptr+i)) {
*(ptr+i+1)=*(ptr+i);
i--;
}
*(ptr+i+1) = *k;
printf("%d\n",*(ptr+i+1));
for( x=0;x<10;x++)
printf("%d,",*(ptr+x));
printf("\n");
}
for( i=0;i<10;i++)
printf("%d,",*ptr++);
printf("\n");
}
错误发生在 for
循环中的 printf
语句之后,当我从两侧删除 *
时,它起作用但答案是错误的。
这是 C 语言中使用指针的插入排序。
最佳答案
正如您所说,问题就在 printf()
之后:
*k=*(ptr+j)
我还没看清楚右侧。左侧肯定有问题:指针未初始化,因此写入该地址几乎肯定会引起麻烦。
右侧也有内存访问,但是,经过检查,看起来可能没问题。
关于c - 使用指针时 C 中的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11043085/