0

我在这里做错了什么?我是在将内存分配给原始文件charPtr还是其他东西?为什么我可以读取charPtrwithinfunc2而不是 in main ( charPtris NULLin main) 的值?

#include <stdlib.h>
#include <stdio.h>
void func2(char *charPtr)
{
        charPtr = (char *)malloc(sizeof(char));
        *charPtr = 'c';
        printf("func2: %c\n", *charPtr);
}

void func1(char** charDoublePointer)
{
        //*charDoublePointer = (char *)malloc(sizeof(char));
        func2(*charDoublePointer);
}

int main(int argsc, char* argv[])
{
        char * charPtr = NULL;
        func1(&charPtr);

        printf("%c\n", *charPtr);
}
4

2 回答 2

1

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

void func2(char *charPtr);

您可以通过以下方式定义函数

char * func2()
{
        char * charPtr = (char *)malloc(sizeof(char));
        *charPtr = 'c';
        printf("func2: %c\n", *charPtr);

        return charPtr;
}

void func1(char** charDoublePointer)
{
        //*charDoublePointer = (char *)malloc(sizeof(char));
        *charDoublePointer = func2();
}
于 2014-10-17T18:55:22.827 回答
1

您缺少一级间接性。func2需要采取char**就像func1。当你写:

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

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

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

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

并像这样调用它func1

func2(charPtr);
于 2014-10-17T18:56:20.690 回答