我有一个初学者的问题 我需要传递一个指向函数的指针,然后为这个指针分配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.如何以最短的方式执行此操作?
答案 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..*/
希望这会有所帮助。