C 初始化字符串时内存泄漏

C 初始化字符串时内存泄漏,c,string,memory-leaks,C,String,Memory Leaks,案例1:我编写了下面的c程序,当我检查内存泄漏时,我在这一行str=(char*)malloc(10)得到内存泄漏即使我已经写了语句来释放内存 #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char *str; str = (char*)malloc(10); str = "string"; printf("length : %l

案例1:我编写了下面的c程序,当我检查内存泄漏时,我在这一行
str=(char*)malloc(10)得到内存泄漏即使我已经写了语句来释放内存

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    char *str;
    str = (char*)malloc(10);
    str = "string";
    printf("length : %ld\n",strlen(str));
    free(str);
    return 0;
}
str=(char*)malloc(10);
str=“string”<代码>str=(char*)malloc(10);
str=“string” 两者不一样

在这种情况下,
strcpy(str,“string”)
是将“string”复制到str的正确方法。str被分配后,您可以释放它。所以没有内存泄漏

如果出现
str=“string”
,分配给str的内存将丢失,并导致内存泄漏

两者不一样

在这种情况下,
strcpy(str,“string”)
是将“string”复制到str的正确方法。str被分配后,您可以释放它。所以没有内存泄漏

如果出现
str=“string”
,分配给str的内存将丢失,并导致内存泄漏

str=“string”

在此之后,
str
指向不同的内存位置(在许多平台上,它将是只读内存)。因此,它不再指向通过
malloc
分配的内存。当您调用
free(str)
时,您正试图释放一些本不应该释放的内存。这是一种未定义的行为。它可能什么也不做,也可能崩溃。malloced内存正在泄漏

strcpy(str,“string”)

这里,字符串被复制到
str
指向的已分配内存中。您拥有这个内存,将数据复制到其中,然后释放它。所以这里没有问题

因此,这两种情况的基本区别在于,在第一种情况下,
str
指向的位置与分配的位置不同。

str=“string”

在此之后,
str
指向不同的内存位置(在许多平台上,它将是只读内存)。因此,它不再指向通过
malloc
分配的内存。当您调用
free(str)
时,您正试图释放一些本不应该释放的内存。这是一种未定义的行为。它可能什么也不做,也可能崩溃。malloced内存正在泄漏

strcpy(str,“string”)

这里,字符串被复制到
str
指向的已分配内存中。您拥有这个内存,将数据复制到其中,然后释放它。所以这里没有问题


因此,这两种情况的基本区别在于,在第一种情况下,
str
指向的位置与分配的位置不同。

情况1表现出未定义的行为:您不会在从
malloc()
获得的同一指针上调用
free()
。而在案例2中,您需要。1)
str=“string”它被指向字符串literal.case1的指针覆盖
str=“string”
-错误,因为它不是复制字符串操作;必须是strcpy(str,“string”)
中的case2@nikniknik2016字符串?它是C而不是C++。案例1显示了未定义的行为:在从 MalCube()/<代码>中得到的同一个指针上,您不调用<代码> For()代码>。而在案例2中,您需要。1)
str=“string”它被指向字符串literal.case1的指针覆盖
str=“string”
-错误,因为它不是复制字符串操作;必须是strcpy(str,“string”)
中的case2@nikniknik2016字符串?它是C不是C++。是的,我试图释放内存,但我得到MunMAPUCK()。我试图释放内存,但我得到MunMAPH CYK()错误,我知道为什么会发生这种情况,只有那些指针可以被Maloc和它的朋友函数返回的自由函数释放,这是CaloC,realloc谢谢你的帮助是的,我试图释放内存,但我得到了munmap\u chunk()错误是的,我试图释放内存,但我得到了munmap\u chunk()错误,我得到了它发生的原因,所以只有那些指针可以被malloc返回的free函数释放,它的朋友函数是calloc,realloc谢谢你的帮助
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    char *str;
    str = (char*)malloc(10);
    strcpy(str,"string");
    printf("length : %ld\n",strlen(str));
    free(str);
    return 0;
}
 str = (char*)malloc(10);
 str = "string"; <-- You just lost the pointer to the malloced memory. ie. memory leak.
 free(str); <-- Here you are trying to free the `"string"` itself. Not possible.