为了账号安全,请及时绑定邮箱和手机立即绑定

C编程:malloc()在另一个函数中

C编程:malloc()在另一个函数中

C C++
30秒到达战场 2019-07-02 16:38:15
C编程:malloc()在另一个函数中我需要帮助malloc() 在另一个函数中.我经过一个指针和大小从我的main()我想为这个指针动态地分配内存malloc()但我看到的是.正在分配的内存用于在我调用的函数中声明的指针,而不是用于在main().如何将指针传递给函数并为传递的指针分配内存从调用函数内部?我编写了以下代码,并得到如下所示的输出。资料来源: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 bytesPoint2: Memory allocated input_image: 0 bytes
查看完整描述

3 回答

?
BIG阳

TA贡献1859条经验 获得超6个赞

您需要将指向指针的指针作为参数传递给您的函数。

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


查看完整回答
反对 回复 2019-07-02
?
慕田峪9158850

TA贡献1794条经验 获得超7个赞

如何将指针传递到函数并从调用函数内部为传递的指针分配内存?

扪心自问:如果您必须编写一个必须返回int你会怎么做?

要么直接返回:

int foo(void){
    return 42;}

的级别,或者通过输出参数返回它。间接(即,使用int*而不是int):

void foo(int* out){
    assert(out != NULL);
    *out = 42;}

所以当您返回指针类型时(T*),这是相同的:要么直接返回指针类型:

T* foo(void){
    T* p = malloc(...);
    return p;}

或者添加一个间接级别:

void foo(T** out){
    assert(out != NULL);
    *out = malloc(...);}


查看完整回答
反对 回复 2019-07-02
?
aluckdog

TA贡献1847条经验 获得超7个赞

如果您希望您的函数修改指针本身,则需要将其作为指针传递给指针。下面是一个简化的示例:

void allocate_memory(char **ptr, size_t size) {
    void *memory = malloc(size);
    if (memory == NULL) {
        // ...error handling (btw, there's no need to call free() on a null pointer. It doesn't do anything.)
    }

    *ptr = (char *)memory;}int main() {
   char *data;
   allocate_memory(&data, 16);}


查看完整回答
反对 回复 2019-07-02
  • 3 回答
  • 0 关注
  • 742 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信