0

我有一个初学者问题,我需要将一个指针传递给一个函数,然后为这个指针分配动态内存。我在主函数中创建指针,然后将它传递给应该分配内存的特定函数。但我收到此错误:“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。我该如何以最短的方式做到这一点?

4

2 回答 2

2

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

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

你可能的意思是sizeof(int)*histLen

于 2013-01-12T00:24:37.777 回答
0

首先,我认为您缺少括号sizeof。sizeof 是一个函数,它需要它的参数。并且做sizeof(histLen)*(histLen)的是告诉 malloc '保留' sizeof(maxvalue+1),histlen 次。我认为你可能想要hist_array的是分配一个整数向量,因为它是一个指向 int 的指针。这是通过以下方式完成的:

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

这告诉 malloc 为 histlen 整数“保留”内存。

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

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

希望这可以帮助。

于 2013-01-12T04:31:56.397 回答