malloc内存分配

malloc内存分配,c,malloc,C,Malloc,我有一个初学者的问题 我需要传递一个指向函数的指针,然后为这个指针分配dinamic内存。 我在main函数中创建指针,然后将其传递给应该分配内存的特定函数。但我得到了这个错误: “hist_数组可在未初始化的情况下在此函数中使用” 以下是程序中的相关行: 从主要方面: int* hist_array; fillHistogram(first_image,hist_array,max_value+1); 职能: void fillHistogram(int imag

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

以下是程序中的相关行: 从主要方面:

    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。我如何以最短的方式做到这一点

目的似乎是调用代码在调用
fillHistogram
之前进行分配

您的解决方案的问题是
fillHistogram
中的
hist
是您传入的指针的副本。更改副本时,原始副本仍处于未初始化状态


您可能是指
sizeof(int)*histLen
首先,我认为您的
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_数组
作为参数传递,并且没有为
hist_数组
返回malloc返回指针,因此您可能应该在函数中说,您希望在主函数中修改它的值。 这称为通过引用传递参数,要在函数中更改其值,您需要说您希望更改变量的pointed by值,而不是变量的副本。 这看起来像这样:

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

希望这有帮助

为什么要分配空间来存储指针?无论如何,您都必须将结果存储在指针中,那么为什么不将函数指针存储在那里呢?关于另一个问题,请使用
calloc
void*calloc(size\t nmemb,size\t size)
,它为每个大小
大小
的对象分配空间,并将分配的内存归零。此分配中不允许使用calloc。我不理解您的第一条评论。您确定fillhistogram的第二个参数是
int*
?我想应该是
int**
,或者您不会更改hist_数组的值。我的目的是在fillhistogram函数中为hist_数组分配内存,然后在我用它应该得到的值填充它之后,将它用于其他事情。指针+数组+函数的整个组合对我来说还不是很清楚,所以我很难使用它。@LittleRunway:如果你想在
fillHistogram
中分配数组,你需要某种方法从
fillHistogram
,这需要更改签名(您说您不能这样做)来直接返回新的hist_数组,或者获取一个额外的
int**
参数来写入hist_数组。您能给我举一个第二个选项的例子吗?所以您基本上是说,如果不更改签名,我就无法执行此操作?