我正在尝试通过指针访问字符串数组。分配内存时似乎工作正常,但如果我再次尝试迭代指针,值会以某种方式丢失。但是,指出的地址是正确的。
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 处缺少有效地址的值?
谢谢,