这是任务;
定义一个接受两个整数参数的函数。该函数将指针返回到它将动态分配的整数值。如果参数值相同,则实现一个为整数变量动态分配内存的函数。分配时,该函数应将变量初始化为0。如果参数的值不同,则不分配内存,该函数返回NULL。
我创建了代码,但我认为这不好:
#include <stdio.h>
#include <stdlib.h>
int* funk(int a, int b ){
int *p;
if(a == b){
p = (int*)calloc(a,sizeof(int));
return p;
}
else{
return NULL;
}
}
int main(void){
int *p = NULL;
p = funk(4 , 4);
printf("%d", *p);
free(p);
return 0;
}
那么,有人可以检查此代码并为我提供帮助吗?
答案 0 :(得分:0)
所以您知道,这是一个非常人为设计的练习。通常,您不必为单个整数分配内存。但是有时返回指针并且有时返回NULL的函数是一个真正的问题。
在C语言中,您通常需要提防函数无法返回有效值。在这种情况下,您需要检查funk
是否没有返回NULL,然后再尝试打印并释放它。尝试使用NULL指针是undefined behavior,您可能会遇到内存冲突,例如segmentation fault。
int *p = funk(4 , 4);
if( p != NULL ) {
printf("p = %d\n", *p);
free(p);
}
else {
puts("Give us the funk");
}
此外,您只想分配一个整数,因此将1作为单位数传递给calloc
。还有don't cast calloc nor malloc,这是不必要的混乱。 C将为您执行转换。
// Allocate space for 1 integer, initialize it to 0, and assign it to p.
p = calloc(1, sizeof(int));