免费的C中未初始化的指针

时间:2019-03-07 14:54:24

标签: c free

如果我为指针动态分配了空间,请列出以下内容:

int *a = (int*)malloc(sizeof(int));

代码完成后,我应该释放一个吗?谢谢!

4 个答案:

答案 0 :(得分:6)

我认为您对指针有一些误解。

您的标题说:

  

免费的未初始化指针...

您的代码是

int *a = (int*)malloc(sizeof(int));

问题是代码中没有没有未初始化的指针。代码中唯一的指针是变量a,它由malloc返回的值初始化

释放未初始化的指针将是不好的-示例:

int *a;  // a is an uninitialized pointer

free(a);  // Real bad - don't do this

但是由于您实际上是在初始化指针,所以-是的,在完成使用对象/内存指针a指向后,您必须调用free。指向对象(即内存)是否已分配值都没有关系。

一般规则:对于每次致电malloc,必须有一次致电free

(例外:如果程序终止,则无需调用free

答案 1 :(得分:3)

int *a = malloc(sizeof(*a));
if (a) 
{
    /* a is now valid; use it: */
    *a = 1 + 2 + 3;
    printf("The value calculated is %d\n", *a);
}

/* Variable A is done being used; free the memory. */
free(a);  /* If a failed to be allocated, it is NULL, and this call is safe. */

答案 2 :(得分:0)

hi
  

代码完成后,我应该释放一个吗?

问题应该是

  

代码完成后,我必须释放一个吗?

答案是肯定的。 public static int countHi(String str) { String s = "hi"; if( str.length() < s.length() ) return 0; if (!str.contains(s)) return 0; if (str.length() == s.length()) return 1; int i = str.indexOf(s); return 1 + countHi(str.substring(i + 1)); } 必须带有int *a = (int*)malloc(sizeof(int)); 语句。

malloc

答案 3 :(得分:-1)

是的。 如果成功分配了内存,那么也可以释放它。

int *a = (int *) malloc(sizeof int);
if (a != NULL)
{
    /* Do whatever you need to do with a */
    free(a);
}
else
{
    puts("the malloc function failed to allocate an int");
}