C指针指针 - 访问字符串列表

时间:2013-06-17 10:19:28

标签: c pointers

我试图通过指针访问字符串数组。当内存被分配时它似乎工作正常,但如果我再次尝试迭代指针,某种程度上会丢失值。但是,指向的地址是正确的。

char **rows = (char **) malloc(sizeof(char) * 8);
int i;

for (i = 0; i < 5; i++) { //first time
    *(rows + i) = malloc(sizeof(char) * 8);
    sprintf(*(rows + i), "0x10%d", i);
    printf("---%s@0x%x", *(rows + i), (rows + i));

}

for (i = 0; i < 5; i++) { //second time
    printf("++++%s@0x%x", *(rows + i), (rows + i));
}

输出格式:值@地址

上面(第一个循环)将产生以下输出:

---0x100@0x1007e0
---0x101@0x1007e8
---0x102@0x1007f0
---0x103@0x1007f8
---0x104@0x100800

哪个值是正确的值和相应的地址。但不知何故,当我再次尝试使用它们时,这些值会丢失,下面是第二个循环的输出:

++++@0x1007e0
++++0@0x1007e8
++++0x102@0x1007f0
++++0x103@0x1007f8
++++0x104@0x100800

可以看出,所有五个节点的地址都是正确的,但缺少起始节点的值。

问题:

为什么在地址0x1007e0和0x1007e8处缺少有效地址的值?

谢谢,

1 个答案:

答案 0 :(得分:2)

我认为这可能与您的代码没有为指针分配足够的空间:因为您要分配八个指针,而不是八个字符,这一行

char **rows = (char **) malloc(sizeof(char) * 8);

应该是

char **rows = malloc(sizeof(char*) * 8);

进行此更改可解决问题(demo on ideone)。