Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 删除回调函数中新建的指针_C++ - Fatal编程技术网

C++ 删除回调函数中新建的指针

C++ 删除回调函数中新建的指针,c++,C++,我正在做以下工作: LRESURT CALLBACK WindowProc{ ....... Case VK_RETURN: int i; for ( i = 0; i <1000; i++) { int size = determinesize(i); int *pttest = new int[size]; .....(some work)....

我正在做以下工作:

LRESURT CALLBACK WindowProc{
    .......
    Case VK_RETURN:
        int i;
        for ( i = 0; i <1000; i++) {
            int  size = determinesize(i);
            int *pttest = new int[size];
            .....(some work)....
            delete[] pttest;
        }
     ........
}
LRESURT回调WindowProc{
.......
案例VK_返回:
int i;

对于(i=0;i您始终需要删除分配的内存。对于每一个新的应该有一个删除,即使它在函数中。您要解决的问题可以通过使用其他具有动态大小的容器轻松解决,如std::vector。在本地函数中使用动态容器,它将自动释放自己分配的内存,您不必担心。

您始终需要删除分配的内存。对于每个新的,应该有一个删除,即使它在函数中。您要解决的问题,可以通过使用其他具有动态大小的容器轻松解决,如std::vector.Using本地函数中的动态容器,它将自动释放自己分配的内存,您不必担心。

关于您的问题,是的,您需要删除
pttest
,除非您想故意泄漏内存。基本上,只要您使用
new
/
new[]分配某些内容
,您应该在以后不需要它时手动删除它


但您确实应该考虑使用<代码> STD::vector < /COD>而不是使用<代码>新版[]/COD>分配的数组。您将不必担心用<代码>删除[]删除内存。

std::vector
将在其析构函数中自动执行此操作。

关于您的问题,是的,您需要删除
pttest
,除非您想故意泄漏内存。基本上,每当您使用
/
新[]
分配内容时,您应该
删除
/
删除[]
当您不再需要它时,请稍后手动安装


但您确实应该考虑使用<代码> STD::vector < /COD>而不是使用<代码>新版[]/COD>分配的数组。您将不必担心用<代码>删除[]删除内存。

std::vector
将在其析构函数中自动执行此操作。

如果保留代码原样,则无需使用delete或new:

int size = determinesize(i);
std::vector<int> test( size );
.....(some work)....
int size=determinesize(i);
标准::病媒测试(大小);
……一些工作。。。。

基于堆栈的解决方案也同样有效。如果您想保持原样,那么此时当然不需要删除
pttest
,但您必须在某个时候删除它,并将其从开关中取出,这会增加它无法正常工作和倾斜的风险。

如果您保持原样,那么您就不需要删除它ed为此使用delete或new:

int size = determinesize(i);
std::vector<int> test( size );
.....(some work)....
int size=determinesize(i);
标准::病媒测试(大小);
……一些工作。。。。

基于堆栈的解决方案也同样有效。如果您想保持原样,那么此时当然不需要删除
pttest
,但您必须在某个时候将其删除,并将其从开关中取出会增加其无法正常工作并倾斜的风险。

当您使用new或new[]创建指针时C++中的操作在堆中分配内存。即使在方法中这样做也是如此。因此,当使用新的或新的[]创建指针时,需要使用DELATE或DELTECT[O]来释放堆内存。

< P>C++中的操作在堆中分配内存。即使在方法中这样做也是如此。因此,为了释放堆内存,需要使用DELAST或DELTECT[O]。

,通常你不应该使用NeX[]这几天,当然不删除。 为了获得额外的效率点,请重复使用相同的向量,调整其大小以避免分配1000个单独的阵列:

vector<int> test;

for(int i = 0; i < 1000; ++i) {
    test.resize(determinsize(i));
    ...
}
向量测试;
对于(int i=0;i<1000;++i){
测试。调整大小(确定大小(i));
...
}

作为一项规则,您现在不应该使用new[],当然也不应该删除。而应该使用vector。 为了获得额外的效率点,请重复使用相同的向量,调整其大小以避免分配1000个单独的阵列:

vector<int> test;

for(int i = 0; i < 1000; ++i) {
    test.resize(determinsize(i));
    ...
}
向量测试;
对于(int i=0;i<1000;++i){
测试。调整大小(确定大小(i));
...
}

是的,您总是需要任何堆分配的内存。无论您在何处进行分配。只有堆栈分配的变量会自动删除。
new
操作符在堆上分配内存,因此您必须手动释放这些分配的内存。顺便说一句,循环中的代码不是异常安全的,有时至少,您的循环中可能存在漏洞。请使用
std::vector
以避免任何可能的问题。我想知道在循环前面放置
int*pttest=new int[size];
delete[]pttest;
在循环结束后。在计算过程中,似乎只需要它来保存一些变量。但要注意它的初始化。使用
std::string
而不是
new char[size]
是的,您总是需要任何堆分配的内存。无论您在何处进行分配。只有堆栈分配的变量会自动删除。
new
操作符在堆上分配内存,因此您必须手动释放这些分配的内存。顺便说一句,循环中的代码不是异常安全的,有时至少,您的循环中可能存在漏洞。请使用
std::vector
以避免任何可能的问题。我想知道在循环前面放置
int*pttest=new int[size];
delete[]pttest;
在循环结束后。似乎您只需要它在计算过程中保存一些变量。但是要注意它的初始化。使用
std::string
而不是
new char[size]
@Fanael我已经更改了它。可能一开始就应该这样做。@Fanael我已经更改了。可能应该已经更改了