通过指针错误传递值

MSD*_*561 2 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);
}
Run Code Online (Sandbox Code Playgroud)

Sam*_*hik 6

你是通过data价值来传递的f().

f() 设置其参数的值.

因为参数是通过值传递的,所以这对data变量绝对没有任何作用main().f()泄漏分配的内存,并且当它返回时,main()data仍然是nullptr.

你应该通过引用传递它:

void f(unsigned char *&data)
Run Code Online (Sandbox Code Playgroud)

或者,更好的是,返回它.f()不需要参数.

unsigned char *f() {
    return (unsigned char *)malloc(200);
}
Run Code Online (Sandbox Code Playgroud)