【发布时间】:2017-01-18 20:31:59
【问题描述】:
这是我目前的代码:
char * duplicate(char *str)
{
int len = strlen(str) + 1;
char *ptr;
ptr = (char *)malloc(len);
strcpy(ptr, str);
str = (char *)realloc((void *)str, len * 2 * sizeof(char));
strcat(str, ptr);
free((void *)ptr);
present(str);
return(str);
}
旁注:我知道我应该检查内存是否实际分配,我稍后会这样做。
程序要求用户输入一个字符串,然后将其加倍并打印出新字符串。
present->a 我创建的函数可以将字符串打印出来。
现在我的思路是这样的:
1) 为占位符指针分配内存,将str字符串复制到ptr
2) 为str 重新分配内存,现在大小增加了一倍
3) 使用strcat复制字符串
4) 释放ptr 内存
输出应该如下:
string input by users for example: "Hi"
output: "HiHi"
如果我们再次运行该函数,输出应该是:"HiHiHiHi"
我面临的问题是,在运行该函数大约 2-4 次后(取决于输入字符串的大小),程序会崩溃,它会说它有一个触发点,类似于:"wntdll.pdb not loaded".
我相信这与内存有关,因为如果我尝试复制较大的字符串,它会在第一次之后崩溃。
我是否正确分配内存?我现在不知道该怎么办。
感谢您的帮助:)
【问题讨论】:
标签: c string memory duplicates