GCC中的分段错误

时间:2014-06-25 22:30:57

标签: c gcc segmentation-fault

我是C的新手,我正试图找出指针。我尝试了这个简单的(根据我)代码并在GCC中继续得到分段错误

#include<stdio.h>
int main()
{
    char c[50] = "abc";
    char h[50];

    char *ptr;
    printf("abc");
    ptr = c;

    printf("Address stored in ptr: %p" , ptr);

    printf("Value of ptr: %s" , *ptr);
}

我读了段错误,发现当我尝试引用不属于我的内存时会发生这些错误。我在这个代码中在哪里做这个?谢谢!

2 个答案:

答案 0 :(得分:4)

更改此声明

printf("Value of ptr: %s" , *ptr);

printf("Value of ptr: %c" , *ptr);

printf("Value of ptr: %s" , ptr);

取决于您想要看到的内容。或者使用它们来看看差异。:)

答案 1 :(得分:1)

printf("Value of ptr: %s" , *ptr);告诉计算机将存储在ptr指向的地址处的值解释为字符串的地址。在大多数情况下,这将是未映射的内存区域的地址(在小端机器上0x636261,例如x86 / x64),因此会出现分段错误。

由于%s格式说明符会释放字符串的地址,因此无需取消引用指针:

printf("Value of ptr: %s" , ptr);