对C++不太熟悉,我有以下几点:
void read_image(vector<unsigned char>* buffer) {
buffer = new vector<unsigned char>(2048);
}
int main(int argc, char ** argv) {
vector< unsigned char > *buffer;
read_image(buffer);
delete buffer; // gives invalid pointer at run-time
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这仅仅是代码的相关部分,基本上我要初始化的指针buffer在read_image().在运行时我试图释放堆时得到这个:
*** glibc detected *** ./main: free(): invalid pointer: 0x00007fff0648556c ***
Run Code Online (Sandbox Code Playgroud)
我的做法有什么问题?
Fil*_*efp 11
您不是buffer通过引用发送(或作为指向vector<unsigned char>*) when callingread_image` 的指针,因此该函数无法将更新传播到函数外部(即调用者).
这个功能的修改将产生你想要的:
void read_image(vector<unsigned char>*& buffer) {
buffer = new vector<unsigned char>(2048);
}
Run Code Online (Sandbox Code Playgroud)
我们现在将引用作为参数传递给read_image,并且原始变量将使用返回的值进行更新new vector<...> (...).
如果你是指针狂热者,这也是有效的:
void read_image (vector<unsigned char>** buffer) {
*buffer = new vector<unsigned char>(2048);
}
...
read_image (&buffer);
Run Code Online (Sandbox Code Playgroud)
在上面我们给read_image指针本身的地址,在里面我们可以解除指向指针的指针,以设置原始指针指向的值.
请原谅我的说法,老实说我很累.
关于参考文献使用的常见问题.
| 归档时间: |
|
| 查看次数: |
1843 次 |
| 最近记录: |