1. ホーム
  2. c

C言語プログラミング:別の関数内のmalloc()

2023-08-14 23:42:48

質問

私は malloc() 別の関数内 .

を渡しています。 ポインタ サイズ を私の main() を使って、そのポインタのために動的にメモリを確保したいと思います。 malloc() を使って動的にメモリを割り当てたいのですが、私が見たところ...割り当てられたメモリは呼び出された関数内で宣言されたポインタ用で main() .

関数にポインタを渡し、渡されたポインタのためにメモリを確保するにはどうしたらよいでしょうか 呼ばれた関数の内部から ?


以下のようなコードを書きましたが、以下のような出力が得られました。

SOURCE:

int main()
{
   unsigned char *input_image;
   unsigned int bmp_image_size = 262144;

   if(alloc_pixels(input_image, bmp_image_size)==NULL)
     printf("\nPoint2: Memory allocated: %d bytes",_msize(input_image));
   else
     printf("\nPoint3: Memory not allocated");     
   return 0;
}

signed char alloc_pixels(unsigned char *ptr, unsigned int size)
{
    signed char status = NO_ERROR;
    ptr = NULL;

    ptr = (unsigned char*)malloc(size);

    if(ptr== NULL)
    {
        status = ERROR;
        free(ptr);
        printf("\nERROR: Memory allocation did not complete successfully!");
    }

    printf("\nPoint1: Memory allocated: %d bytes",_msize(ptr));

    return status;
}

プログラムの出力です。

Point1: Memory allocated ptr: 262144 bytes
Point2: Memory allocated input_image: 0 bytes

どのように解決するのですか?

関数のパラメータとしてポインタを渡す必要があります。

int main()
{
   unsigned char *input_image;
   unsigned int bmp_image_size = 262144;

   if(alloc_pixels(&input_image, bmp_image_size) == NO_ERROR)
     printf("\nPoint2: Memory allocated: %d bytes",_msize(input_image));
   else
     printf("\nPoint3: Memory not allocated");     
   return 0;
}

signed char alloc_pixels(unsigned char **ptr, unsigned int size) 
{ 
    signed char status = NO_ERROR; 
    *ptr = NULL; 

    *ptr = (unsigned char*)malloc(size); 

    if(*ptr== NULL) 
    {
        status = ERROR; 
        free(*ptr);      /* this line is completely redundant */
        printf("\nERROR: Memory allocation did not complete successfully!"); 
    } 

    printf("\nPoint1: Memory allocated: %d bytes",_msize(*ptr)); 

    return status; 
}