【发布时间】:2014-04-08 07:48:05
【问题描述】:
我正在使用 CppUTEST 测试一些 C 代码。
我在 C 中有一个函数 foo(int *bar),它 mallocs 一些内存,写入内存并返回到 C++ 代码。但是,当函数返回C++代码时,指针仍然是空指针。
所以这基本上就是我想做的事情
bar() {
int *result=0;
foo(result);
cout << *(result+1) << endl;
}
foo(int *bar) {
bar=(int *)malloc(sizeof(int)*4);
*(bar+1)=2;
*(bar+2)=5;
return 2;
}
它是双向的,当我在 C++ 中分配内存并传递一个我写入的指针时,我只是把垃圾拿出来。
我的印象是堆分配的内存可以在任何地方写/读。
【问题讨论】:
-
请显示代码。
-
如果您设置
bar,例如bar = malloc(42);在foo中,那么你就不会在函数外看到bar的值。您需要进一步的间接(foo(int **bar);或使用int *foo() { ... return bar; } -
C 和 C++ 将变量按值传递给函数;如果您有
int *bar; foo(bar);,则不可能更改bar的值。你需要传递一个指向bar的指针。 -
代码或者它没有发生!