c-通过两个函数来分配指针



我做错了什么?我是将内存分配给原始charPtr还是其他什么?为什么我可以在func2中读取charPtr的值,但不能在main中读取(charPtr在main中是NULL)?

#include <stdlib.h>
#include <stdio.h>
void func2(char *charPtr)
{
        charPtr = (char *)malloc(sizeof(char));
        *charPtr = 'c';
        printf("func2: %cn", *charPtr);
}
void func1(char** charDoublePointer)
{
        //*charDoublePointer = (char *)malloc(sizeof(char));
        func2(*charDoublePointer);
}
int main(int argsc, char* argv[])
{
        char * charPtr = NULL;
        func1(&charPtr);
        printf("%cn", *charPtr);
}

您缺少一个间接级别。CCD_ 6需要像CCD_ 8一样取一个CCD_。当你写:

void func2(char *charPtr)
{
        charPtr = (char *)malloc(sizeof(char));
        *charPtr = 'c';
        printf("func2: %cn", *charPtr);
}

您只是分配局部变量charPtr,它对外部程序没有影响。相反,写:

void func2(char **charPtr)
{
        *charPtr = malloc(sizeof(char)); //don't cast result of malloc
        **charPtr = 'c';
        printf("func2: %cn", **charPtr);
}

如果您坚持,请将名称更改为charDoublePtr

并在func1中称之为:

func2(charPtr);

函数func2获取原始指针的副本。即函数的参数func2是一个局部变量,在退出函数后将被销毁。

void func2(char *charPtr);

您可以通过以下方式定义的功能

char * func2()
{
        char * charPtr = (char *)malloc(sizeof(char));
        *charPtr = 'c';
        printf("func2: %cn", *charPtr);
        return charPtr;
}
void func1(char** charDoublePointer)
{
        //*charDoublePointer = (char *)malloc(sizeof(char));
        *charDoublePointer = func2();
}

相关内容

  • 没有找到相关文章

最新更新