gpt4 book ai didi

c - 为什么在指向字符串文字后不能成为指针 free()

转载 作者:行者123 更新时间:2023-12-02 05:41:23 25 4
gpt4 key购买 nike

关于我的问题有一些相关的讨论,但是没有明确解释我的问题。

我认为我必须 free() 无论何时何地 malloc(),但我必须这样做,以防止内存泄漏。所以我有以下程序:

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

int main(void)
{
int *ptr;

ptr = malloc(256);

if (ptr == NULL) {
printf("Out of memory\n");
return 1;
}

*ptr = 10;

printf("The value of PTR is:\t%d\n",*ptr);
free(ptr);

return 0;
}

我有一个指针,我动态分配了一些内存 (256),然后我检查了 NULL 字母我 free() 它。

到这里一切正常:指针被动态分配了一些内存,然后我free() 它。

现在我将使用一个 char 指针,在我动态分配一些内存 (256) 之后,我将把该指针指向一个字符串文字,比方说 MICHI:

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

int main(void)
{
char *ptr;

ptr = malloc(256);

if (ptr == NULL) {
printf("Out of memory\n");
return 1;
}

ptr = "michi";
printf("%s",ptr);

free(ptr);

return 0;
}

这里我做错了,因为如果我尝试 free() 它,那么它不会工作,因为碰巧我要释放一个非堆对象。

所以我在这里迷路了,因为我认为你必须 malloc() 的所有内容都必须 free() 它。究竟是什么使该指针在指向字符串文字后不需要被 free()ed

最佳答案

ptr = malloc(256);
...
ptr = "michi";
printf("%s",ptr);
free(ptr);

当您将内存分配给 ptr,然后使其指向 string literal。因此指针 ptr 不再指向由 malloc 分配的内存。

free 不是由 malloc 或类似函数分配的内存会导致程序出错。

改为这样做:

strcpy(ptr,"michi");

关于c - 为什么在指向字符串文字后不能成为指针 free(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32144812/

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