gpt4 book ai didi

c - Realloc 崩溃:cygwin_exception::open_stackdumpfile:将堆栈跟踪转储到 malloc.exe.stackdump

转载 作者:行者123 更新时间:2023-12-04 15:00:54 24 4
gpt4 key购买 nike

我是动态内存分配的新手,我尝试编写一个简单的程序来连接 2 个字符串(一个已初始化,一个从标准输入读取),第一个字符串使用 realloc。但是我收到这个错误:

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 %s\n", str, str2);

str = (char *)realloc(str, strlen(str) + strlen(str2));

strcat(str, str2);
printf("%s\n", str);
free(str);
}

最佳答案

你声明了一个指向字符串文字的指针

char *str = "The most beloved";

字符串文字具有静态存储持续时间。因此它们可能不会动态重新分配。

因此这个声明

str = (char *)realloc(str, strlen(str) + strlen(str2));

调用未定义的行为。

注意需要为结果字符串的终止零字符'\0'预留内存。

你需要的是以下内容

char *result = ( char * )malloc( strlen(str) + strlen(str2) + 1 );

strcpy( result, str );
strcat( result, str2 );

puts( result );

free( result );

而且写起来会更安全

scanf("%19[^\n]", str2);

关于c - Realloc 崩溃:cygwin_exception::open_stackdumpfile:将堆栈跟踪转储到 malloc.exe.stackdump,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66966520/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com