home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #19 / NN_1992_19.iso / spool / comp / lang / c / 13043 < prev    next >
Encoding:
Internet Message Format  |  1992-08-31  |  3.7 KB

  1. Xref: sparky comp.lang.c:13043 comp.lang.c++:13120
  2. Newsgroups: comp.lang.c,comp.lang.c++
  3. Path: sparky!uunet!europa.asd.contel.com!darwin.sura.net!ua1ix!ha17.eng.ua.edu!sdarbha
  4. From: sdarbha@ha17.eng.ua.edu (Subrahmanyam Darbha)
  5. Subject: Difference between malloc and calloc
  6. Message-ID: <1992Aug31.233258.149607@ua1ix.ua.edu>
  7. Originator: sdarbha@ha17.eng.ua.edu
  8. Sender: news@ua1ix.ua.edu
  9. Nntp-Posting-Host: ha17.eng.ua.edu
  10. Organization: The University of Alabama, Tuscaloosa
  11. Julieline: see if this comes up.
  12. Date: Mon, 31 Aug 1992 23:32:58 GMT
  13. Lines: 86
  14.  
  15. Recently I posted a question on this newsgroup about the following questions
  16. The following represents a summary of the answers I received
  17. Thanks to all who replied
  18.  
  19.  
  20. Question :
  21. I have a problem understanding the difference between calloc and malloc
  22. because in my code malloc seems to be working and calloc does not seem to be
  23. Can anybody enlighten me on this ?
  24.  
  25. Answers :
  26. I had this problem one. It can be cured by a) making sure you
  27. have included the necessary prototypes (if using ANSI C) or
  28. b) type-casting the arguments to calloc to size_t.
  29.  
  30.     Read the manual.  The only two differences between malloc() and
  31. calloc() are:
  32.  
  33.         1) malloc() takes a number of bytes, where calloc() takes
  34.            a number of blocks, and the byte size of each block; and
  35.         2) calloc() zeroes out the memory.
  36.  
  37.     So,
  38.  
  39.             p = calloc(nblocks, blocksize);
  40.  
  41. is identical to
  42.  
  43.             p = malloc(nblocks * blocksize);
  44.             memset(p, 0, nblocks * blocksize);
  45.  
  46.     If malloc() works and calloc() doesn't, all I can figure is that you
  47. aren't passing two arguments.  (Always use lint if you've got it, and
  48. turn all warnings on when you compile.  Always.)  The other option is,
  49. the code depends on the memory being non-zero.
  50.  
  51. The only difference between malloc() and calloc() is that calloc() 
  52. initializes the memory pointed to by NULLs. In fact, calloc() actually
  53. uses malloc() to get the memory, and then does a memset() on it.
  54.  
  55.     void *calloc(size_t nmemb, size_t size)
  56.         allocates space for an array of nmemb objects, each of whose
  57.         size is size. The space is initialized to all bits zero.
  58.     void *malloc(size_t size)
  59.         allocates space for an object whose size is specified by size.
  60.  
  61. so the difference is really that calloc reserves space for something like
  62.  
  63.     yourtype something[nmemb];
  64.  
  65. where sizeof(yourtype) == size, and also clears this space (about
  66. nmemb*size, but may be larger), while malloc reserves space for
  67. something like
  68.  
  69.     yourtype something;
  70.  
  71. where sizeof(yourtype) == size (and no clearing). The general consensus
  72. is that you can use calloc but it often isn't worth the trouble, so
  73. malloc is used (this is also more of a standard function as well).
  74.  
  75. That seems a rather significant difference ... :-)
  76.  
  77. malloc() just allocates memory, while calloc() also does the
  78. equivalent of a memset(ptr, 0, size_of_allocated_memory);
  79.  
  80. Unless there's an outright bug in calloc, the only problem I can think
  81. of is that calloc may clear the memory, but not necessarily initialize
  82. fields of structs to 0. This is probably true for floats and doubles,
  83. and may be true for pointers as well.
  84.  
  85. >Can anybody enlighten me on this ?
  86.  
  87. For further enlightenment, you may have to post the code you think
  88. isn't working, together with a description of what you think it should
  89. do.
  90.  
  91. If you're working in a particular environment -- say, MSDOS -- there
  92. are other restrictions, such as the 64Kb segment restriction, to be
  93. aware of. The system-specific programming groups may be of more help
  94. here.
  95.  
  96. Hope this is of any help,
  97. -- 
  98. *************************** Who else But Darbha ******************************* 
  99. sdarbha@buster.eng.ua.edu     Res: (205) 349 - 5143   Off: (205) 348 - 9289
  100. *******************************************************************************
  101.