函数指针传递

Posted EazyChange

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了函数指针传递相关的知识,希望对你有一定的参考价值。

void GetMemory(char *p, int num)
{
    p = (char *)malloc(sizeof(char)* num);
    int i = 0;
}

int main(int argc,char** argv)
{/*
    char buf1[] = "123";
    aa(buf1);
    */
    char *str = NULL;
    GetMemory(str, 100);

    return 0;
}

先看这个例子,函数GetMemory明显不能分配内存给str,而且还会造成内存泄漏。

分析一下过程:

1.声明并定义str,str地址为0x00000000;

2.进入函数。把str拷贝给p,即p只是一个str的副本,拥有str的地址值:0x00000000;

3.malloc开始分配内存,分配成功后,p的地址肯定不是原来的0x00000000,是什么不重要,反正肯定不是str的那个地址了。

4.函数执行完了,返回。内存必然分配成功,原来的那个p的是指向那块内存的指针,但是并没有赋给str的这一操作,所以str仍然是原来0x00000000.

 

char *GetMemory(int num)
{
    char *p = (char *)malloc(sizeof(char)* num);
    return p;
}

看这个函数,main里补一句,char *str=GetMemory(100);

1.p被定义,分配了一段内存,p指向那段内存。p这个指针在栈上,而那段内存在堆上;

2.函数返回p,此时拷贝一遍p,即函数产生了一个p的副本,p的地址被返回给str。

3.恭喜str成功领导了那块内存!

可以给str鼓掌了!

以上是关于函数指针传递的主要内容,如果未能解决你的问题,请参考以下文章

C++ 传递指针给函数

片段 getArguments() 空指针异常

更新:C++ 指针片段

c++异步回调函数引用传递空指针异常

如何正确地将指针传递给第 3 方代码的成员函数? [复制]

将结构指针向量对的值传递给函数