我知道这个用例可能听起来有点奇怪,但我需要了解是否可以做类似的事情。
这是我的代码,它会导致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);
答案 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);