I've just got a quick question about how memory is stored on the computer..
Say you had 16bytes of memory, had 3 arrays of characters, one 4 bytes, one 2 bytes and one 6 bytes long:

cstr1 = (char*)malloc(sizeof(char)*4)
cstr2 = (char*)malloc(sizeof(char)*2)
cstr3 = (char*)malloc(sizeof(char)*6)
cstr1="test";
cstr2="ok";
cstr3="testing";

0001 t
0010 e
0011 s
0100 t
0101 o
0110 k
0111 t
1000 e
1001 s
1010 t
1011 i
1100 n
1101 g
1110
1111

Now if you were to free up cstr2, there would be a gap of 2 bytes between cstr1 and cstr2. If you were to attempt to create another array of characters, 4 bytes long, would the compiler shift the array holding 'testing' up two bytes, to fit in the new array, or would it simply generate an error?