What is the difference between defining an array of a length that is definied before runtime (depends on command line arguments) with array[size]
and using malloc()
? array[i]
leads to the data put on the stack, malloc()
uses the heap[see this stackoverflow]
So with large Data I can run into stackoverflows, but on a new machine a total of 30 char
s and int
s should not be problematic (Stack is around 1MB on windows according to this).
So I am probably missing something obvious.
As far as I understand, when defined in main()
,the two should be the same:
Example 1
int size; // depends on some logic
char array[size];
Example 2
int size; // depends on some logic
array= (char *)malloc(size * sizeof(char));
free(array); // later after use
But when I use the array inside of functions and hand it over as a pointer (func(char* array)
) or as an array (funct(char array[])
), sometimes the gdb-debugger let's me know that the function gets handed corrupted data in #1 , using malloc()
fixed the issue.
Is array[i]
, not okay to use when it is not determined at compile time? Is it some scoping issue? This answer has a comment suggesting such a thing, but I don't quite understand if that applies here.
I am using C99.