Monday, December 1, 2008

C programming Language placement problem with solution

1)
 Is there any difference between the two declarations, 
1. int foo(int *arr[]) and
2. int foo(int *arr[2])

Answer:
No 

Explanation:
Functions can only pass pointers and not arrays. The numbers that are allowed inside the [ ] is just for more readability. So there is no difference between the two declarations.


2)
What is the subtle error in the following code segment?
void fun(int n, int arr[])
{
int *p=0;
int i=0;
while(i++
p = &arr[i];
*p = 0;
}


Answer & Explanation:-
If the body of the loop never executes p is assigned no address. So p remains NULL where *p =0 may result in problem (may rise to runtime error “NULL pointer assignment” and terminate the program).     


3)
What is wrong with the following code?  
int *foo()
{
int *s = malloc(sizeof(int)100);
assert(s != NULL);
return s;
}


Answer & Explanation:-

assert macro should be used for debugging and finding out bugs. The check s != NULL is for error/exception handling and for that assert shouldn’t be used. A plain if and the corresponding remedy statement has to be given.

4)
What is the hidden bug with the following  statement?
assert(val++ != 0);


Answer & Explanation:-
Assert macro is used for debugging and removed in release version. In assert, the experssion involves side-effects. So the behavior of the code becomes different in case of debug version and the release version thus leading to a subtle bug. 
Rule to Remember:
Don’t use expressions that have side-effects in assert statements.  

5)
void main()
{
int *i = 0x400;  // i points to the address 400
*i = 0; // set the value of memory location pointed by i;
}


Answer:
Undefined behavior 


Explanation:-

The second statement results in undefined behavior because it points to some location whose value may not be available for modification.  This type of pointer in which the non-availability of the implementation of the referenced location is known as 'incomplete type'.



No comments:

Post a Comment

Thanks to given comments.......

My Blog List