Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.c > #17539

Re: how to figure out the size of buffer from malloc

From James Kuyper <jameskuyper@verizon.net>
Newsgroups comp.lang.c
Subject Re: how to figure out the size of buffer from malloc
Date 2012-02-17 17:25 -0500
Organization A noiseless patient Spider
Message-ID <jhmk53$fe3$1@dont-email.me> (permalink)
References (2 earlier) <jhk0oi$8cu$1@speranza.aioe.org> <lnipj6fl5m.fsf@nuthaus.mib.org> <jhmaol$qn4$1@speranza.aioe.org> <jhmdjn$7f9$1@dont-email.me> <jhmjds$is4$1@speranza.aioe.org>

Show all headers | View raw


On 02/17/2012 05:13 PM, pembed2012 wrote:
> On Fri, 17 Feb 2012 15:33:58 -0500, James Kuyper wrote:
>> On 02/17/2012 02:45 PM, pembed2012 wrote: ...
>>> Sorry it wasn't clear, I need to take a pointer from malloc and find
>>> out the size of the allocation. To allow for dynamic pointers as well
>>> as stack arrays. Like this:
>>>
>>> myfunc(void* buf){
>>>   int bufsiz=-1;
>>
>> It's absolutely guaranteed, at this point, that sizeof(buf) ==
>> sizeof(void*). As a result, 2 of your next three lines are pointless,
>> which suggests that you were not aware of that fact.
>>
>>>   if(sizeof(buf)==sizeof(void*)) { // pointer
>>>     bufsiz=get_malloc_size(buf)'
>>>   }
>>
>> Why did you think it was possible for the condition of that if() to not
>> be met?
> 
> Often this function will be called with a dynamic pointer from malloc. 
> However, it is also possible to call it with a stack array:
> 
> char ary[10];
> char* ptr=malloc(10);
> myfunc((void*)ary);  // should work
> myfunc((void*)ptr);  // should also work

Assuming that the function's declaration matches the definition you've
given above, the casts are unnecessary in your code above; they specify
the same conversion that will happen anyway even if they weren't present.

Experienced programmers treat every occurrence of a cast as a potential
time bomb that needs to be examined carefully to make sure it's not an
actual bomb. While your code has mistakes, that's not one of them, so
you're better off removing those unnecessary casts.

Again, why do you think sizeof(buf)==sizeof(void*) will be false for one
of those two cases (presumably the first one)?

Incidentally, it's the wrong test even if it could work the way you were
expecting it to do. Consider:

	char arr[sizeof(void*)];

> It started off with the buffers being NULL-free strings. However now I 
> need to work with strings with embedded NULL characters. This means I 
> can't find the length of the buffer with strlen. And it would be too much 
> change to add a new argument to pass the length of the buffer. So the 
> only good solution is for myfunc to work out by it's self 1) if the 
> buffer is a dynamic pointer or stack array and 2) the size of the buffer.

Unfortunately, it's not possible for your function to figure out either
of those things in the way that you want it to. Your best solution is to
make the changes needed to add a new argument containing the length of
the buffer.
-- 
James Kuyper

Back to comp.lang.c | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

how to figure out the size of buffer from malloc pembed2012 <once@was.enough.invalid> - 2012-02-16 20:21 +0000
  Re: how to figure out the size of buffer from malloc James Kuyper <jameskuyper@verizon.net> - 2012-02-16 15:38 -0500
  Re: how to figure out the size of buffer from malloc John Gordon <gordon@panix.com> - 2012-02-16 20:48 +0000
    Re: how to figure out the size of buffer from malloc pembed2012 <once@was.enough.invalid> - 2012-02-16 22:42 +0000
      Re: how to figure out the size of buffer from malloc John Gordon <gordon@panix.com> - 2012-02-16 22:50 +0000
      Re: how to figure out the size of buffer from malloc Keith Thompson <kst-u@mib.org> - 2012-02-16 14:50 -0800
        Re: how to figure out the size of buffer from malloc pembed2012 <once@was.enough.invalid> - 2012-02-17 19:45 +0000
          Re: how to figure out the size of buffer from malloc China Blue Sea <chine.bleu@yahoo.com> - 2012-02-17 11:53 -0800
          Re: how to figure out the size of buffer from malloc Ike Naar <ike@sverige.freeshell.org> - 2012-02-17 20:23 +0000
          Re: how to figure out the size of buffer from malloc James Kuyper <jameskuyper@verizon.net> - 2012-02-17 15:33 -0500
            Re: how to figure out the size of buffer from malloc pembed2012 <once@was.enough.invalid> - 2012-02-17 22:13 +0000
              Re: how to figure out the size of buffer from malloc James Kuyper <jameskuyper@verizon.net> - 2012-02-17 17:25 -0500
              Re: how to figure out the size of buffer from malloc Shao Miller <sha0.miller@gmail.com> - 2012-02-17 17:54 -0500
              Re: how to figure out the size of buffer from malloc Keith Thompson <kst-u@mib.org> - 2012-02-17 15:01 -0800
                Re: how to figure out the size of buffer from malloc Shao Miller <sha0.miller@gmail.com> - 2012-02-17 18:10 -0500
              Re: how to figure out the size of buffer from malloc Ian Pilcher <arequipeno@gmail.com> - 2012-02-17 18:14 -0600
              Re: how to figure out the size of buffer from malloc "BartC" <bc@freeuk.com> - 2012-02-18 11:07 +0000
              Re: how to figure out the size of buffer from malloc ImpalerCore <jadill33@gmail.com> - 2012-02-18 04:40 -0800
              Re: how to figure out the size of buffer from malloc Kaz Kylheku <kaz@kylheku.com> - 2012-02-18 12:48 +0000
          Re: how to figure out the size of buffer from malloc Shao Miller <sha0.miller@gmail.com> - 2012-02-17 17:45 -0500
      Re: how to figure out the size of buffer from malloc Shao Miller <sha0.miller@gmail.com> - 2012-02-16 22:18 -0500
  Re: how to figure out the size of buffer from malloc Devil with the China Blue Dress <chine.bleu@yahoo.com> - 2012-02-16 13:20 -0800
  Re: how to figure out the size of buffer from malloc Lew Pitcher <lpitcher@teksavvy.com> - 2012-02-16 17:07 -0500
  Re: how to figure out the size of buffer from malloc Keith Thompson <kst-u@mib.org> - 2012-02-16 14:28 -0800
  Re: how to figure out the size of buffer from malloc Mark Adler <madler@alumni.caltech.edu> - 2012-02-16 23:49 -0800
  Re: how to figure out the size of buffer from malloc Michael Angelo Ravera <maravera@prodigy.net> - 2012-02-18 09:54 -0800
    Re: how to figure out the size of buffer from malloc gazelle@shell.xmission.com (Kenny McCormack) - 2012-02-18 18:21 +0000
      Re: how to figure out the size of buffer from malloc Shao Miller <sha0.miller@gmail.com> - 2012-02-18 13:56 -0500
      Re: how to figure out the size of buffer from malloc Stephen Sprunk <stephen@sprunk.org> - 2012-02-18 13:42 -0600

csiph-web