array !is null fails

BCS BCS at pathlink.com
Tue Feb 13 11:55:53 PST 2007


Frits van Bommel wrote:
> 
> 
> I'd argue that if you have an array with a non-zero length but null 
> pointer, you've already messed up somewhere. It should have been checked 
> at whatever place sliced the null pointer.

Yup. But then again asserts should be used to check stuff you otherwise 
can't control (incoming arguments and returns from 3rd party code etc.)

I go by the assumption that if an assert *ever* trips then, by 
definition, you have a bug (unless you are trying to trip it in a 
unittest or something).

Conditions that might happen without bugs should be handled with exceptions.

> (The only way to obtain such 
> an array would be either slicing a raw pointer or using pointer 
> casts/unions to access memory as a different type than it actually is, 
> right?)
> 
> And it'd get even worse if you take a non-empty slice from such an array 
> that doesn't start at index 0. Then you have'd an array with non-zero 
> length and non-null pointer that is nevertheless very much invalid, and 
> without any way to detect it[1].
> 

Maybe there should be a gc.IsValid(void[]) function that returns true if 
  the full length of the array is readable (or is GC allocated if the 
first is to hard).

I wonder what it would take to make asserts do that check when given an 
array.

char[] c
assert(c); // is c "good"?


> 
> 
> [1]: That is, short of indexing it and detecting the segfault/access 
> violation caused, or resorting to system-dependent checks like "is it in 
> the first page of memory".


More information about the Digitalmars-d-learn mailing list