有一些关于我的问题的相关讨论,但没有关于我的问题的明确解释。
我认为我必须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
字母I 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()
它,它将不会工作,因为它碰巧我将释放一个非堆对象。
所以我在这里迷路了,因为我认为你所拥有的一切都是为了free()
它。到底是什么使得指针在指向字符串文字之后不需要进行free()
编辑
https://stackoverflow.com/questions/32144812
复制相似问题