我需要malloc()inside another function的帮助.

我从main()向函数传递了pointersize,我想从调用的函数内部使用malloc()为该指针动态分配内存,但我看到的是.正在分配的内存是为我调用的函数中声明的指针分配的,而不是为main()内的指针分配的.

我应该如何将指针传递给函数并为传递的指针from inside the called function分配内存?


我已经编写了以下代码,并得到如下所示的输出.

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; 
} 

C++相关问答推荐

“C”中函数内部的数据操作

如何在 C++ 中包含使用 C++ 关键字作为标识符的 C 标头?

使用 printf() 输出正确的小数位数?

在 Macbook M1 上为 Tensorflow 安装 C API

如何在c中的图中标记已访问过的顶点

你能用科学计数法打印一个整数吗?

C中的“x”和“&x[0]”有什么区别吗?

我们可以使用变量根据需要给出数组中元素的数量吗?

DirectX11 与多视频适配器 (GPU) PC

你怎么能告诉一台计算机它正在添加而不在 Assembly 中添加 addl

C:表示不带浮点的分数

在 Win32 上双重转换为 unsigned int 被截断为 2,147,483,648

如何制作一个不会被优化的无限空循环?

如果缺少 const char* 数组初始化逗号,则生成编译器警告

从函数返回结构时可能出现 GCC 错误

为什么快速整数类型比其他整数类型快?

项目中包含程序集文件时,来自 mmap 的意外 exec 权限

为什么glibc的strlen需要这么复杂才能快速运行?

如何检测 C 代码(需要'extern C')是否在 C++ 中编译

“使用带二进制位运算符的有符号整数操作数” - 使用无符号短时