当前位置:  开发笔记 > 编程语言 > 正文

释放分配给void指针数组的内存

如何解决《释放分配给void指针数组的内存》经验,为你挑选了2个好方法。

我正在声明一个void指针数组.每个都指向任意类型的值.
void **values; // Array of void pointers to each value of arbitary type

初始化值如下:

    values = (void**)calloc(3,sizeof(void*));
    //can initialize values as: values = new void* [3];
    int ival = 1;
    float fval = 2.0;
    char* str = "word";
    values[0] = (void*)new int(ival);
    values[1] = (void*)new float(fval);
    values[2] = (void*)str;

    //Trying to Clear the memory allocated
    free(*values); 
    //Error: *** glibc detected *** simpleSQL: free(): invalid pointer: 0x080611b4
    //Core dumped
    delete[] values*;
    //warning: deleting 'void*' is undefined
    //Similar Error.

现在我如何释放/删除为值分配的内存(void指针数组)?



1> Dan Lenski..:

我怀疑问题是你分配的方式values:.那应该是而不仅仅是.values = (void*)calloc(3,sizeof(void))sizeof(void *)sizeof(void)

sizeof(void)可能是零或其他没有意义的东西,所以你并没有真正分配任何内存开始...它只是运气不好,分配工作,然后当你试图解除分配时弹出错误记忆.

编辑:你也在C++风格new/ deleteC风格malloc/ 交替之间提出麻烦free.它是好的,只要你不使用这两个delete东西你malloc"编辑或free东西,你new"版,但你会,如果你再这样下去他们在你的脑袋混合起来.



2> Michael Burr..:

您有3个动态分配的东西,需要以两种不同的方式释放:

delete reinterpret_cast( values[0]);    
delete reinterpret_cast( values[1]);

free( values); // I'm not sure why this would have failed in your example, 
               //    but it would have leaked the 2 items that you allocated 
               //    with new

请注意,由于str未动态分配,因此不应(实际上不能)释放它.

几个笔记:

我假设那sizeof(void)sizeof(void*) 因为你所拥有的不会编译

我不会对你看似随机的演员说什么,只不过它看起来像是一般的灾难准备好的代码

推荐阅读
虎仔球妈_459
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有