我在这里做错了什么?我是否将内存分配给原始charPtr
或其他内容?为什么我可以在charPtr
中读取func2
的值,而不是主要的charPtr
是NULL
?
#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);
}
答案 0 :(得分:1)
函数func2
获取原始指针的副本。这是functioon的参数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();
}
答案 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);