如何用C解决动态内存分配问题?

时间:2020-07-05 17:24:32

标签: c function pointers dynamic-memory-allocation

这是任务;

定义一个接受两个整数参数的函数。该函数将指针返回到它将动态分配的整数值。如果参数值相同,则实现一个为整数变量动态分配内存的函数。分配时,该函数应将变量初始化为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;
    
}

那么,有人可以检查此代码并为我提供帮助吗?

1 个答案:

答案 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));