通过指针错误传递值

时间:2016-07-01 00:00:12

标签: c++ pointers

我不明白为什么会崩溃。我发送一个指向数组的指针,分配该数组然后修改数组。有什么问题?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void f(unsigned char *data) {
    data = (unsigned char *)malloc(200);
}

int main() {
    unsigned char *data = nullptr;
    int i;
    f(data);
    memset(data, 0, 200);
}

3 个答案:

答案 0 :(得分:6)

您将data的值传递给f()

f()设置其参数的值。

由于参数是按值传递的,因此对data中的main()变量完全没有任何影响。 f()泄漏分配的内存,当它返回时,main()的{​​{1}}仍然是data

您应该通过引用传递它:

nullptr

或者,更好的是,返回它。 void f(unsigned char *&data) 不需要参数。

f()

答案 1 :(得分:3)

f的调用不会改变data中定义的变量main的值,正如您所期望的那样。它会更改data中定义的f的值,但由于参数是按值传递的,因此对data中定义的main没有影响。

答案 2 :(得分:3)

更改

 void f(unsigned char *data) { // ....

 void f(unsigned char *&data) { // ....
                    // ^
 }

 void f(unsigned char **data) {
     *data = (unsigned char *)malloc(200);
 }

并致电

 f(&data);
// ^

所有关于传递对要在函数内初始化的data指针的引用。

您的示例按值传递data,并且不会更改函数外部的指针。