On my machine, the following code apparently produces stacksmashing:
#include <stdio.h>
#include <stdlib.h>
void function2(int* data);
void function1();
void function2(int* data)
{
printf("grps ");
printf(" ");
printf(" one more line\n");
}
void function1()
{
printf("function1_checkpoint1\n");
int *tempData[520721];
function2(tempData);
}
int main()
{
printf("main_checkpoint1\n");
function1();
printf("main_checkpoint2\n");
return 0;
}
If it does not crash on your machine, try replacing 520721
by some more crazy number like 10 million. The output I have is:
main_checkpoint1
And then crash. If I replace 520721
by 520720
I get:
main_checkpoint1
function1_checkpoint1
And then also crash. If instead I replace printf(" ")
by printf("")
(suppress the space, printing an empty string), the program is running normally and I get
main_checkpoint1
function1_checkpoint1
grps one more line
main_checkpoint2
Finally, replacing int *tempData[520721];
by int *tempData=malloc(520721*sizeof(int));
with subsequent testing of the success of malloc()
and usage of free(tempData);
have always worked in all the cases I tested.
As you can see, all I am doing is calling a first function in main
, which creates a very big local int
table, and then passing the pointer to this int
table, to a second function. And the second function does nothing except printf
s and doesn't even touch to the pointer or the data it points to.
I was just wondering what on earth was going on in my machine...why is this code producing a crash?
Thanks very much for your insight!