【发布时间】:2021-08-04 06:19:53
【问题描述】:
typedef char* DString;
DString dstring_initialize(const char* str);
int dstring_concatenate(DString* destination, DString source);
void dstring_delete(DString* stringToDelete);
int main(void)
{
DString str1, str2;
str1 = dstring_initialize("hello ");
str2 = dstring_initialize("world");
dstring_concatenate(&str1, str2);
dstring_delete(&str1);
dstring_delete(&str2);
}
DString dstring_initialize(const char* str)
{
char* res = malloc(strlen(str) + 1);
if (res != NULL)
{
strcpy(res, str);
}
return res;
}
int dstring_concatenate(DString* destination, DString source)
{
DString newstr = realloc(*destination, ((strlen(*destination)+1)+ strlen((&source)+1))* sizeof *source);
if(newstr == NULL)
{
printf("Error");
}
strcat(newstr, source);
*destination = newstr;
return 1;
}
void dstring_delete(DString* stringToDelete)
{
assert(stringToDelete != NULL);
free(stringToDelete);
assert(*stringToDelete == NULL);
}
我怀疑我的分配错误或分配的内存释放不正确,因为当我调试代码时,它卡在free(stringToDelete); 部分然后崩溃。另一件事是我怀疑realloc 部分不正确。任何帮助将不胜感激,如果问题很糟糕,请随时发表评论,以便我提高沟通技巧并进一步改进问题。
【问题讨论】:
标签: c string malloc realloc double-pointer