1,105,633 Community Members

malloc(); in C [Short tutorial]

Member Avatar
lionaneesh
Junior Poster
109 posts since Feb 2010
Reputation Points: -4 [?]
Q&As Helped to Solve: 5 [?]
Skill Endorsements: 0 [?]
 
-1
 

Introduction

Hey! Guyz.. Welcome to my very short tutorial explaining basic uses of "malloc" function in C language.

[NOTE : You need simple understanding about pointers to understand this tutorial]

Hey guyz see by reading this tutorial you'll not be a malloc expert ..

This tutorial is only for the very Basics..

So what are we waiting for lets get started..

About Malloc

Malloc() is a very powerfull function in C language. It is used in almost every powerful program or the any program which deals with pointers.

According to my understanding the best way to learn something in C is by example code so:-

#include<stdio.h>     /* For standard input output */
#include<malloc.h>    /* You need this if on UNIX or LINUX */
#include<string.h>

int main()
{
    char words[]={"Hey this is a simple tutorial on malloc\n"};
    char *p;    /* char pointer for use with malloc() */

    p = (char *)malloc(sizeof(words)); /* Explained in the following text */

    strcpy(p,words);

    printf("p = %s\n",p);
    printf("words = %s\n",words);

    return(0);
}

[mark=code]The Code[/mark]

Explanation:-

lines 1-3:-
include files needed

lines 7-8
Declarations already explained in comments.

line 10 /* the real stuff */Here come malloc():-

*************************************************************

first something about malloc :-


The prototype of malloc is as follows:-

void *malloc(size_t size);

malloc();
takes one argument as an input that is number of bytes to be "allocated" in memory as simple as that.

But hey what is that weird looking statement before malloc(); ..
That is called cast.

If you have read about cast in C you would be having no problem in understanding this .
But if not read about this now "Hey but after reading this tutorial".

**************************************************************

Something about sizeof();
prototype:-

sizeof(data);

1. You must be thinking what is that sizeof(words) in the "arg" of malloc.
2. The sizeof() takes input of data and returns an integer value that is number of bytes that data is .
eg:-
char = 1 bytes.
int = 4 bytes.
etc.
3. In this case it is the sizeof(words) here words is an array and the number of characters in 40 and now how many bytes we need
40 * 1;
because character is 1 byte and words contains 40 characters.

4. sizeof() ; function says it all . It means size of the "data" in this case "words".

You must be thinking where he is getting us with all this stuff .. but these were important.

***************************************************************

Ok now let's get to the output of the program.

Output :-

p = Hey this is a simple tutorial on malloc.
words = Hey this is a simple tutorial on malloc.

As expected.

Yeah! Guys you'll be thinking that what is the use of this function.
As you get into some experienced programming you'll get answer of that ..

as I said this function is very powerful and is very advanced it is basically used in linked lists and and some "structs I guess "

But i'd not touching that topic ..
Now you all have simple understanding of malloc().. "Say Yess "

References

No references guyz ... Only one my "brain" .. LOL..

[mark=ref]Contact me[/mark]

For reporting any errors or questions contact me on :-

SNIP

Further reading

Sizeof: http://www.ncl.ucar.edu/Document/Functions/Built-in/sizeof.shtml
Malloc: http://en.wikipedia.org/wiki/Malloc
Linked Lists : http://www.codeproject.com/KB/cpp/linked_list.aspx

Member Avatar
Salem
Posting Sage
7,177 posts since Dec 2005
Reputation Points: 5,138 [?]
Q&As Helped to Solve: 970 [?]
Skill Endorsements: 41 [?]
Team Colleague
 
3
 

> #include<malloc.h> /* You need this if on UNIX or LINUX */
This is all wrong.
malloc is prototyped in stdlib.h

> p = (char *)malloc(sizeof(words));
You don't need to cast malloc in C programs.

Have you tried it without the cast? Did you get any error messages?

These perhaps?
"implicit conversion of int to char*" -> you didn't include stdlib.h
"conversion of void* to char*" -> you're using a C++ compiler to compile C code.

> 4. sizeof() ; function says it all . It means size of the "data" in this case "words".
sizeof is an operator, not a function.
Passing an array to a function yields a pointer to the first element of that array.

The parentheses are optional when applying sizeof to a variable.
p = malloc(sizeof words );

Other issues:
- you didn't check malloc for success
- you didn't describe free(), the essential complement to using malloc.

Member Avatar
gerard4143
Nearly a Posting Maven
2,385 posts since Jan 2008
Reputation Points: 371 [?]
Q&As Helped to Solve: 409 [?]
Skill Endorsements: 0 [?]
 
1
 

The parentheses are optional when applying sizeof to a variable.
p = malloc(sizeof words );

Now I didn't know that. I guess that's why I keep coming back.

Member Avatar
Aia
Nearly a Posting Maven
2,307 posts since Dec 2006
Reputation Points: 1,977 [?]
Q&As Helped to Solve: 236 [?]
Skill Endorsements: 20 [?]
 
-1
 

Now I didn't know that. I guess that's why I keep coming back.

sizeof is an unary operator and not a function, the parenthesis are only necessary for precedence sake.

[Edit:]
Missed this point from Salem

> 4. sizeof() ; function says it all . It means size of the "data" in this case "words".
sizeof is an operator, not a function.

Which makes my comment redundant and unnecessary.


lionaneesh>Sizeof: http://www.ncl.ucar.edu/Document/Functions/Built-in/sizeof.shtml
That links to a page explaining a function for NCL programming language, and not ANSI C

Member Avatar
mitrmkar
Posting Virtuoso
1,766 posts since Nov 2007
Reputation Points: 1,056 [?]
Q&As Helped to Solve: 403 [?]
Skill Endorsements: 9 [?]
 
0
 

About Malloc
Malloc() is ...

It is malloc (not Malloc).

References

No references guyz ... Only one my "brain" .. LOL..

You can find the current draft standard here ..
http://www.open-std.org/JTC1/SC22/WG14/www/docs/n1256.pdf

Member Avatar
lionaneesh
Junior Poster
109 posts since Feb 2010
Reputation Points: -4 [?]
Q&As Helped to Solve: 5 [?]
Skill Endorsements: 0 [?]
 
-1
 

Guyz :( you should understand that i am a human and i can be mistakened OK!

So, please don't post bad reputation points.

You all should understand that atleast I tried to write a tutorial.

Man are you all guyz perfect .. HUH! :(

Question Answered as of 3 Years Ago by Salem, Aia, mitrmkar and 1 other
Member Avatar
mitrmkar
Posting Virtuoso
1,766 posts since Nov 2007
Reputation Points: 1,056 [?]
Q&As Helped to Solve: 403 [?]
Skill Endorsements: 9 [?]
 
1
 

Based on your reply, I take that you are seeing too much red at the moment. But anyhow, I'd suggest that you get over that, and instead go through the replies you received, improving your tutorial. After all, that's the purpose of these replies, don't you think so too?

PS. Also note that your post could have been completely ignored, but it wasn't.

Member Avatar
lionaneesh
Junior Poster
109 posts since Feb 2010
Reputation Points: -4 [?]
Q&As Helped to Solve: 5 [?]
Skill Endorsements: 0 [?]
 
0
 

Based on your reply, I take that you are seeing too much red at the moment. But anyhow, I'd suggest that you get over that, and instead go through the replies you received, improving your tutorial. After all, that's the purpose of these replies, don't you think so too?

PS. Also note that your post could have been completely ignored, but it wasn't.

Thnx for motivating ...
Thnx a lot...

Member Avatar
koved
Newbie Poster
3 posts since Oct 2009
Reputation Points: 0 [?]
Q&As Helped to Solve: 0 [?]
Skill Endorsements: 0 [?]
 
0
 

char words[]={"Hey this is a simple tutorial on malloc\n"};

i think it shoud end with \0 or nothing is required over there

Member Avatar
Ancient Dragon
Achieved Level 70
27,637 posts since Aug 2005
Reputation Points: 5,232 [?]
Q&As Helped to Solve: 3,037 [?]
Skill Endorsements: 115 [?]
Team Colleague
Featured
Sponsor
 
0
 

i think it shoud end with \0 or nothing is required over there

Not necessary -- the compiler will generate the '\0' null terminator. But the { and } characters are unnecessary.

Member Avatar
jephthah
Posting Maven
2,572 posts since Feb 2008
Reputation Points: 1,888 [?]
Q&As Helped to Solve: 196 [?]
Skill Endorsements: 5 [?]
 
2
 

Guyz :( you should understand that i am a human and i can be mistakened OK!

So, please don't post bad reputation points.

You all should understand that atleast I tried to write a tutorial.

Man are you all guyz perfect .. HUH! :(

when you post something and declare it is a "tutorial" then, yes, you are holding your code up to be critiqued to standards of perfection.

notice how many tutorials there currently are for C. There is one (1). that's it. now maybe there should be more, and certainly there could be more, but before you are going to add one then you better make sure your code and explanations are rock-solid and dead-on before you hit that "submit" button.

especially with something as critical as malloc(). improper/sloppy use of malloc() is the source of very many problems in programs because people don't fully understand how to use it correctly. it doesnt help matters when people who don't fully understand how to use it correctly, go and declare their half-formed ideas as "tutorials" on a search-optimized programming forum that will propagate misinformation for years to come.

had you just posted this as a question or an example -- i.e., if you had left "tutorial" out of the subject -- you wouldn't have been downvoted.

when you're really an authority on a subject, you will cite credible references, not "just your brain". at that point, you might be ready to write a tutorial.

Member Avatar
lionaneesh
Junior Poster
109 posts since Feb 2010
Reputation Points: -4 [?]
Q&As Helped to Solve: 5 [?]
Skill Endorsements: 0 [?]
 
0
 

i think it shoud end with \0 or nothing is required over there

When we use (")and(") operators {Double quotes}..
the compiler automatically sets up \0 "NULL" at the end.

You
This question has already been solved: Start a new discussion instead
Post:
Start New Discussion
Tags Related to this Article