如果我为指针动态分配了空间,请列出以下内容:
int *a = (int*)malloc(sizeof(int));
代码完成后,我应该释放一个吗?谢谢!
答案 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");
}