Path: csiph.com!eternal-september.org!feeder.eternal-september.org!reader01.eternal-september.org!.POSTED!not-for-mail From: Tim Rentsch Newsgroups: comp.lang.c Subject: Re: sizeof object got by dereferencing uniniitalized pointer Date: Fri, 29 Nov 2019 06:10:45 -0800 Organization: A noiseless patient Spider Lines: 50 Message-ID: <86sgm67oyi.fsf@linuxsc.com> References: <21e377ab-2a49-4f7e-bc18-72f1cee63204@googlegroups.com> <9d5ee6d4-607b-405f-83d9-afbe2b073cac@googlegroups.com> <76a74489-4a1f-4561-a01b-b2962a10bae4@googlegroups.com> <2119c5dc-fc01-4a74-93f4-8027c7cc210e@googlegroups.com> <43093894-ed52-47de-85f4-eadd92a1499e@googlegroups.com> <877e3j52do.fsf@bsb.me.uk> <86eexr8qlh.fsf@linuxsc.com> <87v9r33211.fsf@bsb.me.uk> <861rtr8ndf.fsf@linuxsc.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Injection-Info: reader02.eternal-september.org; posting-host="81b92e3fa8397acac1ab5cf195ff75cd"; logging-data="28980"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1+eyUlyzLy8gcLnp2+6/g5yqrA0sMRBUUc=" User-Agent: Gnus/5.11 (Gnus v5.11) Emacs/22.4 (gnu/linux) Cancel-Lock: sha1:exU6Z3ouwD1cjkfNomoz12VPoLU= sha1:Wg1rlDVTGHjt+1RQyVRSYgbaH5s= Xref: csiph.com comp.lang.c:148288 Richard Damon writes: > On 11/28/19 8:47 PM, Tim Rentsch wrote: > >> Ben Bacarisse writes: >> >>> Tim Rentsch writes: >>> >>>> Ben Bacarisse writes: >>>> >>>>> Thiago Adams writes: >>>>> >>>>> >>>>>> Only when applied to variably types, sizeof is in runtime. >>>>>> >>>>>> int n = 10; >>>>>> >>>>>> int(*buf)[n] = malloc(sizeof(int) * n); >>>>> >>>>> Why would you not write >>>>> >>>>> int (*buf)[n] = malloc(sizof *buf); >>>>> >>>>> ? >>>> >>>> Perhaps because, technically speaking, the right-hand side here >>>> has undefined behavior? >>> >>> Yes, it has. That has always puzzled me. Do you think that this usage >>> was specifically being ruled out, or is it a casualty of having made an >>> overly simple decision[1]? >> >> Short answer: overly simple decision casualty. But that is just >> a guess, if I have time I will try to give a more thoughtful >> answer later. > > I had always read the phrase from 6.5.3.4p2 > > The sizeof operator yields the size (in bytes) of its operand, which may > be an expression or the parenthesized name of a type. The size is > determined from the type of the operand. The result is an integer. If > the type of the operand is a variable length array type, the operand is > evaluated; otherwise, the operand is not evaluated and the result is an > integer constant. > > As referring to if the operand WAS a variable length array type, but the > wording doesn't quite say that. My guess is that is what was intended. Is this just supposition on your part? Or do you have some sort of confirmation based on other sources?