代码如下:
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/