2

我正在尝试通过指针访问字符串数组。分配内存时似乎工作正常,但如果我再次尝试迭代指针,值会以某种方式丢失。但是,指出的地址是正确的。

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 处缺少有效地址的值?

谢谢,

4

1 回答 1

2

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

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

应该

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

进行此更改可以解决问题(ideone 上的演示)。

于 2013-06-17T10:24:56.033 回答