如何为只读字符串重新分配内存?

时间:2014-04-30 20:05:39

标签: c string malloc realloc

我知道这个用例可能听起来有点奇怪,但我需要了解是否可以做类似的事情。

这是我的代码,它会导致Aborted (core dumped)崩溃:

char *my_str = "Hello World";
my_str = realloc(my_str, 50);

- 请你帮我理解它崩溃的原因?

- 是否有一种标准/优雅的方式将原始字符串复制到动态内存中,除了下面的一个?使用realloc()而非malloc() + memcpy()

对我来说非常重要
int len = strlen(my_str);
char *new_str = (char*)malloc(len + 1);
memcpy(new_str, my_str, len + 1);

1 个答案:

答案 0 :(得分:3)

问题代码:

char *my_str = "Hello World";

指定指针' my_str'指向一个静态字符串,该字符串不属于"堆"从哪里分配内存。只有从"堆"分配的内存可以使用' realloc()'调整大小,或者最终使用' free()';

返回堆中

如果用以下代码替换代码:

char *my_str = strdup("Hello World");

现在指针' my_str"指向从堆分配的内存,并且可以按问题代码中的指示调整其大小:

my_str = realloc(my_str, 50);

请记住在不再需要时释放这个已分配的内存:

free(my_str);