我是动态内存分配的新手,我试着写一个简单的程序,用realloc作为第一个字符串来连接两个字符串(一个初始化,一个从stdin读取(。但我收到这个错误:
cygwin_exception::open_stackdumpfile:正在将堆栈跟踪转储到malloc.exe.stackdump
代码在realloc中断,我不知道为什么,你能帮忙吗?
输入:人还活着。
预期输出:在世的最受爱戴的男人。
我试过用数字代替strlen,但没有用。
这是我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char *str = "The most beloved";
char str2[20];
scanf("%[^n]%*c", str2);
//printf("%s %sn", str, str2);
str = (char *)realloc(str, strlen(str) + strlen(str2));
strcat(str, str2);
printf("%sn", str);
free(str);
}
您声明了一个指向字符串文字的指针
char *str = "The most beloved";
字符串文字具有静态存储持续时间。因此,它们可能不会被动态地重新分配。
因此,
str = (char *)realloc(str, strlen(str) + strlen(str2));
调用未定义的行为。
请注意,您需要为结果字符串的终止零字符' '
保留内存。
您需要的是以下
char *result = ( char * )malloc( strlen(str) + strlen(str2) + 1 );
strcpy( result, str );
strcat( result, str2 );
puts( result );
free( result );
而且写会更安全
scanf("%19[^n]", str2);
您正在为未使用malloc
分配的str
分配指针。只有使用malloc
分配了指向free
或realloc
的指针,才能将指针传递给它们。
正确使用realloc((
你可以做
str = strdup("mystring");
此外,在这里,您需要说明最后的