On Tue, 04 Jan 2011 14:34:15 +0200, bearophile <[email protected]> wrote:

void zeroit(T)(T* ptr) if (!IsPointer!T) {
    memset(ptr, 0, (*ptr).sizeof);
}

Standard safer wrappers for some C functions may help low-level D coding.

If you don't want to use a zeroit() then a type system able to catch such bugs needs some nice annotations...

Doesn't D already solve this?
For value types: obj = typeof(obj).init;
For arrays: arr[] = typeof(arr[0]).init; // or just 0 or null or whatever .init is

If the first line is correct, then "new" can't be NULL, so there's no need to test "|| !new".

I think this is something that should be done by the optimizer.

In 7 cases the result of malloc-like function was not tested for NULL:

This is rather specific. Application programmers would usually want an exception to be thrown on a failed allocation.

A very common case (20 cases in few years) are like this, where a pointer is deferenced before the NULL test:

        block = bdev->bd_disk->private_data;
-       base = block->base;
        if (!block)
                return -ENODEV;
+       base = block->base;

Delphi compilers warn in cases when a condition is always true/false, because Delphi lacks metaprogramming so such cases are usually due to a bug.

--
Best regards,
 Vladimir                            mailto:[email protected]

Reply via email to