ポインターを介して文字列の配列にアクセスしようとしています。メモリが割り当てられている場合は正常に動作しているようですが、ポインターを再度反復しようとすると、どういうわけか値が失われます。ただし、指定されたアドレスは正しいです。
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
値と対応するアドレスに関して正しいのはどれですか。しかし、どういうわけか、値を再度使用しようとすると値が失われます。以下は、2 番目のループからの出力です。
++++@0x1007e0
++++0@0x1007e8
++++0x102@0x1007f0
++++0x103@0x1007f8
++++0x104@0x100800
5 つのノードすべてでアドレスが正しいことは明らかですが、開始ノードの値が欠落しています。
質問:
アドレス 0x1007e0 と 0x1007e8 の値が有効なアドレスで欠落しているのはなぜですか?
ありがとう、