C:从提供的地址获取数据

时间:2015-04-07 15:00:26

标签: c

让我说我有一些东西。

char *ptr = malloc(sizeof(char *));
ptr = "AB";

ptr就像0x08123412

所以现在我想做点什么。

char *addr = "0x08123412";

如何从addr中取回AB。

请假设地址不会同时改变。

2 个答案:

答案 0 :(得分:2)

char *ptr = malloc(sizeof(char *));
ptr = "AB";

这是内存泄漏,因为您丢失了malloc()返回的地址,并且无法将该地址发送到free()

char *addr = "0x08123412";

虽然我无法理解你在这里要完成的任务,但这是有效的。无需拨打malloc()。请注意,此代码声明了一个char指针,并将其指向字符串" 0x08123412"。

要取回以前使用过的地址,您需要将其保存在某处。这就是为什么你不能覆盖你的指针值。如果以后需要它们,你需要坚持下去。

答案 1 :(得分:0)

char *ptr = malloc(sizeof(char *));
ptr = "AB";
char *addr = "0x08123412";

现在让我们用这个替换最后一条指令: char *addr = 0x08123412;

这可能是你的意思,它更有意义。 所以我们走了: 首先,您编写了malloc(sizeof (char *)),您可能打算编写malloc(sizeof (char)),因为根据此代码,您将分配一个指向char的指针,而不是char,希望malloc返回一个指向void的指针,这将是隐含的投入你声明的char *ptr

下一条指令:ptr = "AB"。这里发生的是编译器将分配" AB"作为字符串文字可能在.rodata部分。 ' PTR'将保留" AB"放了。
到现在为止,这是你的内存布局:

ptr lives at address X // &ptr = X  
"AB" lives at address Y // &("AB") = Y  
ptr contains Y // ptr = Y 

现在malloc返回的地址,你说是0x08123412,让我们称之为Z,是malloc()分配的内存位置的地址,你在分配" AB&#34时丢失了;到ptr。但假设你把它放在某处,你仍然无法触及" AB"用它。达到字符串的唯一方法" AB"是知道它的地址,而现在,唯一可以帮助你的是ptr,因为它仍然保存着那个地址。覆盖它和" AB"永远失去了。