gpt4 book ai didi

c++ - 如何删除此 Void Pointer?

转载 作者:行者123 更新时间:2023-11-30 02:08:54 25 4
gpt4 key购买 nike

#define ALIGNBUF(Length) Length % ALIGNSIZE ? \
Length + ALIGNSIZE - (Length % ALIGNSIZE) : Length

short NumCols;
long * ColLenArray, * OffsetArray;

ColLenArray = new long(NumCols * sizeof(long));
OffsetArray = new long(NumCols * sizeof(long));

// THIS CODE SHOULD NOT BE NEEDED TO UNDERSTAND THE PROBLEM
// BUT I HAVE INCLUDED IT JUST IN CASE
////////////////////////////////////////////////////////////
SQLColAttribute(hstmt, ((SQLUSMALLINT) i)+1, SQL_DESC_OCTET_LENGTH, NULL, 0, NULL, &ColLenArray[i]);
ColLenArray[i] = ALIGNBUF(ColLenArray[i]);
if (i)
OffsetArray[i] = OffsetArray[i-1]+ColLenArray[i-1]+ALIGNBUF(sizeof(SQLINTEGER));
////////////////////////////////////////////////////////////

void **DataPtr = new void*[OffsetArray[NumCols - 1] + ColLenArray[NumCols - 1] + ALIGNBUF(sizeof(long))];

delete []DataPtr;

不认为可以做到,已经尝试了所有可以想象的方法。

此代码有效,因为在程序运行时,我无法释放内存。每次调用这段代码(不是所有代码都包含在内,因为它不相关)内存变大。我认为删除操作不正确,void * 不断增长。

我也根据这里的建议更改了上面的一些代码,但是随着这段代码的变化,内存不断增长。

最佳答案

您不能在 void * 上调用 delete

解决方案是不要将指向 void** 的指针(这是 new void*[...] 给你的)转换到 无效*。我真的不知道您的代码应该做什么,但是您是否尝试过将 DataPtr 的类型更改为 void **

更一般地说,在 C++ 中尽可能避免 void* 有更好的解决方案。如果您编辑您的问题以描述您想要实现的目标,那么我们可能会帮助提出一些建议。

关于c++ - 如何删除此 Void Pointer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5934892/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com