malloc内存分配

时间:2013-01-12 00:21:50

标签: c malloc

我有一个初学者的问题 我需要传递一个指向函数的指针,然后为这个指针分配dinamic内存。 我在main函数中创建指针,然后将其传递给应该分配内存的特定函数。但我得到这个错误: “hist_array可以在此函数中未初始化使用”

这是该计划的相关内容: 来自主要:

    int* hist_array;
    fillHistogram(first_image,hist_array,max_value+1);  

功能:

    void fillHistogram(int image[M][N], int* hist, int histLen){
    hist=(int*)malloc(sizeof(histLen)*(histLen));

我无法更改功能的签名,它是作为结构化文件提供给我们的。所以我想知道我做错了什么。

和另一个问题。我正在使用malloc创建的新数组,我希望它在开始时的所有值都是0.如何以最短的方式执行此操作?

2 个答案:

答案 0 :(得分:2)

意图似乎是调用代码在调用fillHistogram之前进行分配。

您的解决方案的问题是hist中的fillHistogram是您传入的指针的副本。当您更改副本时,原始文件仍然未初始化。

你可能意味着sizeof(int)*histLen

答案 1 :(得分:0)

首先,我认为你遗漏了sizeof中的括号。 Sizeof是一个函数,它需要它的参数。并且sizeof(histLen)*(histLen)正在告诉malloc'保留'sizeof(maxvalue + 1),这是他的时间。我认为你可能想要的,因为hist_array是一个指向int的指针,就是分配一个整数向量。 这完成了:

hist=malloc(histlen*sizeof(int)); /*I think it gets more easy to read with the lenght multiplier on the left*/

这告诉malloc为hetlen整数'保留'内存。

另一件事,因为你传递hist_array作为参数并且你没有返回hist_array的malloc返回指针,你可能应该在你的函数中说你要修改它的值主要功能。 这称为通过引用传递参数,并且要在函数内部更改其值,您需要说要更改变量的指向值而不是变量的副本。 这看起来像这样:

*hist=malloc(histlen*sizeof(int)); /*The pointed by hist, which hist_array, is equal to malloc etc..*/

希望这会有所帮助。