I have a question regarding memory allocation order.
In the following code I allocate in a loop 4 strings.
But when I print the addresses they don’t seem to be allocated one after the other… Am I doing something wrong or is it some sort of defense mechanism implemented by the OS to prevent possible buffer overflows? (I use Windows Vista).
Thank you.
char **stringArr;
int size=4, i;
stringArr=(char**)malloc(size*sizeof(char*));
for (i=0; i<size; i++)
stringArr[i]=(char*)malloc(10*sizeof(char));
strcpy(stringArr[0], "abcdefgh");
strcpy(stringArr[1], "good-luck");
strcpy(stringArr[2], "mully");
strcpy(stringArr[3], "stam");
for (i=0; i<size; i++) {
printf("%s\n", stringArr[i]);
printf("%d %u\n\n", &(stringArr[i]), stringArr[i]);
}
Output:
abcdefgh
9650064 9650128good-luck
9650068 9638624mully
9650072 9638680stam
9650076 9638736
Typically when you request memory through
malloc(), the C runtime library will round the size of your request up to some minimum allocation size. This makes sure that:However, these are implementation details and you can’t really rely on any particular behaviour of
malloc().