memset指针数组的正确方法是什么?

时间:2012-10-04 21:09:53

标签: c++ c

如果我有T (T*)类型的指针,并且我有一个数组T* array[N],这两种方法是否允许我稍后检查哪些条目是空指针,以便在每个存储桶中懒惰地初始化东西?

memset(array, 0, sizeof(T*)*N);

for (int i = 0; i < N; ++i)
    array[i] = NULL;

即。 memset来电还会让我以后做if (array[i] == NULL) ...吗?

如果不是,我不想引入未定义的行为..

2 个答案:

答案 0 :(得分:10)

虽然技术上要求空指针值不是所有零位,但我不知道任何系统并不是所有零位。所以任何一种方法都应该有用。

然而,有一种更简单的方法来初始化一个数组,即使在一些邪恶的实现上也会设置正确的空指针值:

T *array[N] = {};

或者如果您动态分配它:

T **array = new T*[N]();

答案 1 :(得分:2)

正式地,memset方法不起作用,因为不要求空指针由内存中的值0表示。在实践中它运作良好。

比两者都好:std::uninitialized_fill;标准库实现者可以做一些你无法优化性能的事情。