Talk:Comparison of Object Pascal and C
![]() | Computing Redirect‑class | ||||||
|
![]() | C/C++ NA‑class | ||||||
|
A mistake...
quotation
Despite of its treatment as pointer, not all pointer style constructs could be used to array. For example, this code would compile fine but would cause access violation when executed:
void func(int *a) {
// RUNTIME ERROR! a is allocated statically
a = (int*) malloc(sizeof(int) * 10);
}
int main() {
int a[5];
func(a);
}
end of quotation
No, it is not a run time error. Remember that C/C++ passes parameters by value. So, "a" within "func" is a local copy of the pointer.
a = (int*) malloc(sizeof(int) * 10);
allocates the new memory, and assigns the memory address to "a", which is a local variable (as a byval parameter).
It is a memory leak, because the memory is allocated, and not freed. However, by itself, it will not cause an access violation.
If you were to declare "a" as const:
void func(int * const a) {
then you would get a compiler error. 107.33.42.66 (talk) 06:20, 15 August 2013 (UTC)