我试过这样分配一个内存:
主要:
X** a;
func(a);
Run Code Online (Sandbox Code Playgroud)
FUNC:
func(X** a){
int size = 5;
X* array = (X*)malloc(5*sizeof(X));
//some writing to the array..
a = &array;
}
Run Code Online (Sandbox Code Playgroud)
如果使用调试器,我看到当我在函数中时func一切正常=我可以写入数组并a真正指向数组但是当我回到主要的时候我发生了一些变化而我无法访问数组a(在调试器上它写了类似的东西Target request failed: Cannot access memory at address 0x909090c3等等).
我的错误在哪里?
注意:如果尝试访问(例如,打印)主要部分中的数组,它确实编译但有运行时问题.
谢谢.
你必须像这样改变你的主要:
X* a; // create an uninitialized pointer
func(&a); // pass the address of that pointer to the function
Run Code Online (Sandbox Code Playgroud)
在你的函数中,执行以下操作:
void func(X** a){
int size = 5;
X* array = (X*)malloc(5*sizeof(X));
//some writing to the array..
*a = array; // change the value of the pointer to point to the array
// you allocated
}
Run Code Online (Sandbox Code Playgroud)
请注意,在C++中,方法是使用std::vector<X>:
std::vector<X> func() {
std::vector<X> buffer(5);
// do stuff with buffer
return buffer;
}
std::vector<X> foo = func();
Run Code Online (Sandbox Code Playgroud)
这将vector在函数内部创建一个新函数,并将该向量的副本返回给调用者.请注意,副本将被优化掉.