我有一个初学者问题,我需要传递指向函数的指针,然后为此指针分配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 回答
意图似乎是调用代码将在调用
fillHistogram
之前进行分配 .您的解决方案的问题是
fillHistogram
中的hist
是您传入的指针的副本 . 当您更改副本时,原始文件仍然未初始化 .你可能意味着
sizeof(int)*histLen
.首先,我认为你缺少括号
sizeof
. Sizeof是一个函数,它需要它的参数 . 做sizeof(histLen)*(histLen)
告诉malloc到'reserve' sizeof(maxvalue 1),他的时间 . 我认为你可能想要的是,因为hist_array
是一个指向int的指针,就是分配一个整数向量 . 这完成了:这告诉malloc为“守恒”整数“保留”内存 .
另一件事,因为你传递
hist_array
作为参数并且你没有返回hist_array
的malloc返回指针,你应该在你的函数中说你要在main函数中修改它的值 . 这称为通过引用传递参数,并且要在函数内部更改其值,您需要说要更改变量的指向值而不是变量的副本 . 这看起来像这样:希望这可以帮助 .