【问题标题】:Segmentation fault in GCCGCC中的分段错误
【发布时间】:2014-08-16 15:59:00
【问题描述】:

我是 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);
}

我阅读了段错误,发现当我尝试引用不属于我的内存时会发生它们。我在这段代码中在哪里执行此操作?谢谢!

【问题讨论】:

  • 提高警告级别。

标签: c gcc segmentation-fault


【解决方案1】:

更改此语句

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

到任一

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

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

取决于你想看到什么。或者同时使用它们来查看差异。:)

【讨论】:

    【解决方案2】:

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

    由于%s 格式说明符表示字符串的地址,因此没有必要取消引用指针:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-13
      • 2011-10-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多