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

use*_*386 1 c++ string allocation memcpy ld-preload

我想更改mallocmemcpyfree函数,并将此 libhooker 与 LD_PRELOAD 一起使用。
我改变它们,并测试它们的一些测试用例。但在其中之一中,我的代码无法正常工作,并且不知道为什么。
测试用例:

int main()
{
    string s = "Hello";
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我的代码输出:

malloc[0x8229170-0x8229182]
[memcpy] source address 0x8048850 is not allocated.
free(0x8229170)
Run Code Online (Sandbox Code Playgroud)

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

Sal*_*gar 5

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

该内存通常不由 分配malloc

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