gpt4 book ai didi

c - 为什么我不能以这种方式释放分配的内存?

转载 作者:行者123 更新时间:2023-12-02 14:26:03 24 4
gpt4 key购买 nike

作为一项作业,我必须将两个字符串连接在一起并分配内存。完成后,我希望能够 free(*gluedstring) 来释放分配的内存。但现在我不知道如何弄清楚。

int strlen(char *s);
char *create_concatenated_cstring(char *source1, char *source2);
void destroy_cstring(char **gluedstring);

int main()
{
char *string1 = "Common sense is genius ";
char *string2 = "dressed in its working clothes.";
char *together = create_concatenated_cstring(string1, string2);
printf("Aan elkaar geplakt vormen de strings de volgende " \
"quote:\n\n\"%s\"\n\n", together);
destroy_cstring(&together);
if (NULL == together)
printf("De string was inderdaad vernietigd!\n");
return 0;
}

int strlen(char *s)
{
int n = 0;
for (n = 0; *s != '\0'; s++, n++);
return n;
}

char *create_concatenated_cstring(char *source1, char *source2)
{
int size = strlen(source1) + strlen(source2) + 1;
char *source3 = (char *)malloc(sizeof(char) * size);
if(source3 == NULL)
{
printf("ERROR\n");
return 0;
}
int i=0, j=0, k;
int lengte1 = strlen(source1);
int lengte2 = strlen(source2);
for(;i<lengte1;i++)
{
*(source3 + i) = *(source1 + i);
printf("%c", *(source3+i));
}
for(j=i, k=0;k<lengte2;j++, k++)
{
*(source3 + j) = *(source2 + k);
}
return source3;
}
void destroy_cstring(char **gluedstring)
{
free(gluedstring);
}

最佳答案

因为您正在释放堆栈地址。您需要取消引用指针,如下所示

free(*gluedstring);
// ^ `free' the pointer not it's address (or the pointer to it)
*gluedstring = NULL; // Prevent double `free' for example

请注意,free() 不会使指针 NULL,这就是为什么传递指针地址是好的,因为您可以将其设置为 NULL 并避免悬空指针。

关于c - 为什么我不能以这种方式释放分配的内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34721452/

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