c - 为什么在尝试打印数组时出现段错误?

标签 c memory segmentation-fault

代码如下:

char* a[] = {"ls", "-l", "|", "grep", "test"};
  int pipe_idx = 2;

  char** ptr2 = a + (pipe_idx * sizeof(char**));
  printf("%s\n", *ptr2);

基本上,这只是一个演示代码。程序获取 pipe_index(在本例中为 2)并跳转到正确的位置,然后打印它。

为什么会出现段错误?

最佳答案

ptr2 指向不属于您的内存。现在,它指向 a + 8,因为 sizeof(char**) 是 sizeof 指针,而不是 char 本身。所以大小超过了你的数组大小。这是 UB,这就是您遇到段错误的原因。

如果您尝试使用 char 指针遍历数组,则不需要像现在这样进行乘法运算,只需将 pipe_idx 添加到指针,它就会为您执行所需的运算。 你需要,

char** ptr2 = a + pipe_idx

关于c - 为什么在尝试打印数组时出现段错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37080207/

相关文章:

Android ImageView 设置ImageBitmap

c - 段错误调试帮助

C 数组段错误仅在特定阈值之后

c++ - 重新分配大小未知的 const char 数组

networking - 使用 netfilter 模块将 IP 选项字段附加到 IP header

python - Python中内存高效的大量numpy数组

PHP CPU 和内存使用情况

c - 如何在 C 中为以下代码调试段错误。我在许多函数以及 main 中使用了 malloc 和 free

c - 逐行散列文本文件

c - 我的链表程序出了什么问题? (分段故障)