C Fuctions 中使用的 Heap 还不清楚

标签 c pointers malloc

我仍然对编译解决代码时遇到的错误感到困惑。我尝试制作两个简单的功能。一个初始化数组并在每个索引中放入 0,另一个打印该函数。

以下代码:

#include <stdio.h>
#include <stdlib.h>

int arraybuilder(int len)
{
    int *array;
    array = (int*) malloc(len * sizeof(int));

    for(int i = 0; i<len; i++)
    {
        array[i] = 0;
    }

    free(array);
    return array;
}

void printarray(int array[], int len)
{
    for(int i = 0; i < len; i++)
    {
        printf("array[%d] = %d\n", i, array[i]);
    }
}



int main(int argc, char* argv[]) 
{
    int len = 100;
    int *array = arraybuilder(len);

    printarray(array, len);

    return 0;

}

>

malloctest.c: In function ‘arraybuilder’: malloctest.c:15:9: warning: return makes integer from pointer without a cast [-Wint-conversion] return array; ^

还有:

malloctest.c: In function ‘main’: malloctest.c:31:15: warning: initialization makes pointer from integer without a cast [-Wint-conversion] int *array = arraybuilder(len);

提前感谢您的帮助:)

最佳答案

free(array);
return array;

首先,这是一个问题,因为您正在通过尝试使用已释放的内存来调用未定义的行为。

其次检查返回类型 - 它应该返回 int 但返回 int*。您遇到的两个错误都是由于您提到的 int 返回类型而出现的。 (更清楚地说,您返回了 array,其类型为 int*,并且您说您将返回 int。这就是出现警告的原因)。

在第二种情况下,您应该将 int 分配给 int* 这就是它提示的原因。

您不需要转换 malloc 的返回值,从 void*int* 的转换是隐式完成的。检查 malloc 的返回值,失败时返回 NULL 相应地处理这种情况。

int* arraybuilder(int len)
{
    if( len <= 0){
       fprintf(stderr,"Negative size\n");
       exit(EXIT_FAILURE);
    }
    int *array = malloc(sizeof *array *len );
    if( array == NULL ){
       perror("malloc failed");
       exit(EXIT_FAILURE);
    }
    for(int i = 0; i<len; i++)
        array[i] = 0;
    return array;
}

然后在 main() 中,当您使用完动态分配的内存后,您将释放它。在main()

printarray(array, len);
free(array);
return 0;

关于C Fuctions 中使用的 Heap 还不清楚,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48250156/

相关文章:

c - 释放下属?

c - Linux环境下malloc杀死子进程

C API : why are functions using returnParameters with buffer + size instead of returning char*

c - 如何在C语言中从.text FILE打印每三个(或第n个)单词?

objective-c - objective-c 程序

数组大小为零时的 C++ 内存分配行为

转换新元素以将它们附加到单链表中

具有指针值的 C++ 映射

c - 学生结构问题

c - C 成绩簿中的错误