0

ここで何が間違っていますか?メモリをオリジナルcharPtrまたは何か他のものに割り当てていますか? charPtrwithinの値を読めるのにmain では読めfunc2ないのはなぜですか ( 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

間接的なレベルが 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 に答える