如何快速清除DWORD指针数组?

时间:2014-06-10 09:49:15

标签: c++ arrays pointers

这是我的代码。

DWORD *dwDSE = new DWORD[4096];

这是我清除它的[低效]方式:

for (INT k=0;k<4096;k++)
    dwDSE[k] = 0;

清除它/将其初始化为零的最佳方法是什么?

4 个答案:

答案 0 :(得分:6)

您可以将其初始化为零

DWORD *dwDSE = new DWORD[4096](); //Note the empty parenthesis ()   

答案 1 :(得分:3)

使用memset

memset(dwDSE,0,4096*sizeof(DWORD));

答案 2 :(得分:2)

除非你有一个非常糟糕的编译器,否则最有效的方法 清除它应该是:

std::fill_n( dwDSI, 4096, 0 );

这应该生成与循环相同的代码(即 也非常有效),并且在许多情况下,将是显着的 效率高于memset,这通常是最差的 解决方案(当然,只适用于特殊值0)。

当然,你通常不会做new DWORD[4096] 无论如何。如果你写:

std::vector<DWORD> dwDSI( 4096 );

你会把它初始化为0,你不会泄漏它 例外的情况。如果您需要传统接口 (关于一个人使用DWORD的唯一原因),你可以 使用&dwDSI[0]获取原始指针,如果是,则获取dwDSI.data() 拥有C ++ 11。

编辑:

对另一个答案的评论让我意识到一个重点: 你真的必须动态分配数组吗?如果没有,

DWORD dwDSI[4096] = {};

是最好的解决方案。 (= {}确保初始化 0)

答案 3 :(得分:1)

在这种情况下可以使用memset功能。

std::memset(dwDSE, 0, sizeof(dwDSE)*4096);

fill_n功能:

std::fill_n(dwDSE, 4096, 0);