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

标签 c++ string allocation memcpy ld-preload

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

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

我的代码输出:

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

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

最佳答案

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

此内存通常不由 malloc 分配。

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

关于c++ - c如何为常量字符串分配内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23833544/

相关文章:

C - 自由函数崩溃

c++ - 如何将 char** 中的数据值复制到新的 char** 中?

c++ - std::map 迭代器如何工作?

c++ - 可以用参数包编译c++17 lambda继承的编译器

java - 如何在日语 utf-8 汉字上使用 java 子字符串

c - C中realloc函数的时间复杂度是多少?

c++ - 引用 CMFCToolbar 自定义教程?

c - 如何使用C从键盘读取字符串?

javascript - 只保留 A-Z 0-9 并使用 javascript 从字符串中删除其他字符

c - 为什么这段代码不在 C 中分配内存?