我试图通过指针访问字符串数组。当内存被分配时它似乎工作正常,但如果我再次尝试迭代指针,某种程度上会丢失值。但是,指向的地址是正确的。
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处缺少有效地址的值?
谢谢,
答案 0 :(得分:2)
我认为这可能与您的代码没有为指针分配足够的空间:因为您要分配八个指针,而不是八个字符,这一行
char **rows = (char **) malloc(sizeof(char) * 8);
应该是
char **rows = malloc(sizeof(char*) * 8);
进行此更改可解决问题(demo on ideone)。