malloc function

Hello
This is a simple program i carried out in my machine
i dont know how it is working
#include<alloc.h>
#include<stdio.h>
mian()
{
int p,j;
p= (int
)malloc(1);
for(j=1;j<=580;j++)
{
*p=j;
++p;
}

p=p-580;
for(j=1;j<=580;j++)
{
printf("%d",*p);
}
}

Linux 7.0
gcc compiler

when i mentioned 1 byte in malloc function how it stores 580 integers ?
it is printing from 1 to 580 numbers.
but when i specified as 581 the core gets dumped for same
malloc(1) function
what is reason behind that
how it stores 580 integers in one single byte
why it has not send an message (memory insufficeint)

please explain

You are not storing 580 integers in one byte. You are walking across memory by advancing the pointer by 1 with each iteration. I am surprised that the program doesn't blow up in a more random fashion.

Come to think of it, you are allocating one byte of memory and the integer data type should take between two and four bytes of memory (depending on system). My FreeBSD machine reports 4 bytes for an integer datatype.

You really should be allocating the proper amount of memory with:

p= (int*)malloc(sizeof(int)*580); 

What exactly is the purpose of this program? What's it supposed to do? It looks like you step through memory setting each spot to a number between 1 and 580.. then you go back and read each memory spot..

Maybe there's an easier way than this whole script... especially if the only purpose is to print the numbers from 1 to 580...

This is a bit dangerous, your pointer goes throu the memory and does the doggy things. If you want to do it safely use realloc function it will do same thing in safe way
It will go some thing like that: *p=(*int)realloc(p, (j)*sizeof(int)), and put it in the loop. With that U can use pointer more safely, u can even make it dynamic.

Hope it will help

ur reply to me

/*You are not storing 580 integers in one byte. You are walking across memory by advancing the pointer by 1 with each iteration. I am surprised that the program doesn't blow up in a more random fashion.

Come to think of it, you are allocating one byte of memory and the integer data type should take between two and four bytes of memory (depending on system). My FreeBSD machine reports 4 bytes for an integer datatype.

You really should be allocating the proper amount of memory with:

code:--------------------------------------------------------------------------------
p= (int*)malloc(sizeof(int)580);
--------------------------------------------------------------------------------
/

                    /*my reply*/

since by mentioning a integer pointer and storing the integers
by incrementing the pointer value
then what is the purpose of malloc?
u can decalre it as
in t *p;
several integers can be stored by incrementing the value of p,
hence what is the diffrence between this declaration and
malloc function.
this is an basic question according to my knowledge.
please answer this.

That whol fun(ck) with pionters.
When you declare t *p than you just create pointer of type t, but it is pointing to nothing. When you malloc, you make it point to some certain space in RAM. More You have to malloc certain amount of ram, that why you use sizeof(int), that let's you malloc enough space to acomodate int.

When did that release happend?
I'm running 2.4.19 :wink:
anyway..
*p0ff*

The problem with the original code is that you are allocating that space for use by your program. You were only allocating a single address space and then advancing the pointer, potentially stepping on other programs and system processes.

By allocating the entire chunk you can freely increase the pointer within the chunk without having to worry about stepping on another processing and core'ing the machine.