首页 > 解决方案 > 如何解决 C 中的动态内存分配问题?

问题描述

这是任务;

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

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

标签: cfunctionpointersdynamic-memory-allocation

解决方案


所以你知道,这是一个非常人为的练习。您通常不必为单个整数分配内存。但是有时返回指针有时返回 NULL 的函数是一个真正的问题。

在 C 中,您经常需要注意函数未能返回有效值。在这种情况下,您需要funk在尝试打印和释放它之前检查它没有返回 NULL。尝试使用 NULL 指针是未定义的行为,并且可能会导致内存冲突,例如分段错误

    int *p = funk(4 , 4);
    if( p != NULL ) {
        printf("p = %d\n", *p);
        free(p);
    }
    else {
        puts("Give us the funk");
    }

此外,您只想分配一个整数,因此将 1 作为单位数传递给calloc. 并且不要投射 calloc 或 malloc,这是不必要的混乱。C会为你做演员。

    // Allocate space for 1 integer, initialize it to 0, and assign it to p.
    p = calloc(1, sizeof(int));

推荐阅读