首页 文章

malloc内存分配

提问于
浏览
0

我有一个初学者问题,我需要传递指向函数的指针,然后为此指针分配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 回答

  • 2

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

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

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

  • 0

    首先,我认为你缺少括号 sizeof . Sizeof是一个函数,它需要它的参数 . 做 sizeof(histLen)*(histLen) 告诉malloc到'reserve' 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为“守恒”整数“保留”内存 .

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

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

    希望这可以帮助 .

相关问题