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]