c - 使用指针时 C 中的段错误

标签 c pointers

我不知道这里发生了什么:

#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/

相关文章:

c - 在 C 中,为什么将指针初始化为 0 不会产生编译时错误?

c - 指针数组 c

c++ - 如何从 Char* 的末尾删除 Chars?

c - 无法确定节点中字符串数组的 malloc 参数

c++ - 在c++中实现hashmap的过程中发生了奇怪的事情

c - 设置观察点以在 GDB 中输出十六进制列表

c 多管道管道和文件描述符的问题

c - 如何计算 ADC 读数的平均值?

c - 最小的 GCC 构建

c++ - 将 int8 转换为 int7 的最快方法