我不明白为什么会崩溃。我发送一个指向数组的指针,分配该数组然后修改数组。有什么问题?
#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);
}
答案 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
,并且不会更改函数外部的指针。