c如何将内存分配给常量字符串?

时间:2014-05-23 15:48:25

标签: c++ string allocation memcpy ld-preload

我想更改 malloc memcpy 免费功能,并将此libhooker与LD_PRELOAD一起使用。
我改变它们,并测试它们的一些测试用例。但在其中一个中,我的代码不正确,也不知道为什么 测试案例:

int main()
{
    string s = "Hello";
    return 0;
}

我的代码输出:

malloc[0x8229170-0x8229182]
[memcpy] source address 0x8048850 is not allocated.
free(0x8229170)

我不知道c如何为常量字符串分配内存以及为什么我的代码错误 提前谢谢。

1 个答案:

答案 0 :(得分:3)

字符串常量通常在程序的DATA部分中分配。这通常标记为只读,位置偏移量在编译时定义。

此内存通常不会由malloc分配。

我不确定你要用memcpy做什么,但你不能假设你想要memcpy的所有东西都是用malloc分配的。例如,在堆栈上分配的所有内容。数据部分中的所有内容。使用自定义分配器(可能存在于堆栈中)分配的所有内容。此外,您还需要了解callocallocrealloc