C Programming - Memory Allocation - Discussion
Discussion Forum : Memory Allocation - Find Output of Program (Q.No. 6)
6.
Assume integer is 2 bytes wide. What will be the output of the following code?
#include<stdio.h>
#include<stdlib.h>
#define MAXROW 3
#define MAXCOL 4
int main()
{
int (*p)[MAXCOL];
p = (int (*) [MAXCOL])malloc(MAXROW *sizeof(*p));
printf("%d, %d\n", sizeof(p), sizeof(*p));
return 0;
}
Discussion:
24 comments Page 1 of 3.
Vinaykumar said:
7 years ago
Here p is a pointer.so sizeof(p) is either become 4 bytes or 8 bytes.But here how sizeof(p) is 2 bytes.
int is 2 bytes with 4 elements so sizeof(*p) is 8 bytes (2*4). So the answer is 4(or)8, 8.
int is 2 bytes with 4 elements so sizeof(*p) is 8 bytes (2*4). So the answer is 4(or)8, 8.
(1)
JUBIN SHARMA said:
7 years ago
Here:
P = (int (*) [MAXCOL]) malloc (MAXROW *sizeof (*p)); is allocating a memory of 24 bytes to the pointer P but as it is a pointer to 2D array it will hold the base Row address i.e. 8.
Therefore *P holds up 8*3 bytes but will show 8 bytes i.e the size of its row in sizeof(*P).
And P is itself a pointer to an array of 2*4 bytes and its row holds 2 bytes each.
Actual memory consumed by both members is 2*4 and 8*3 bytes but a pointer holds the base address and thus the first element's address will be shown in sizeof() i.e. 2 and 8 bytes.
P = (int (*) [MAXCOL]) malloc (MAXROW *sizeof (*p)); is allocating a memory of 24 bytes to the pointer P but as it is a pointer to 2D array it will hold the base Row address i.e. 8.
Therefore *P holds up 8*3 bytes but will show 8 bytes i.e the size of its row in sizeof(*P).
And P is itself a pointer to an array of 2*4 bytes and its row holds 2 bytes each.
Actual memory consumed by both members is 2*4 and 8*3 bytes but a pointer holds the base address and thus the first element's address will be shown in sizeof() i.e. 2 and 8 bytes.
(2)
Emanuel said:
9 years ago
I don't understand.
P = (int (*) [MAXCOL]) malloc (MAXROW *sizeof (*p));
So, sizeof (*p) 4 * 2 and malloc gives 3 * 8.
So, the sizeof (*p) will be 24.
P = (int (*) [MAXCOL]) malloc (MAXROW *sizeof (*p));
So, sizeof (*p) 4 * 2 and malloc gives 3 * 8.
So, the sizeof (*p) will be 24.
Madhu said:
10 years ago
What is the difference between the two programs given below?
1.
#include<stdio.h>
#include<stdlib.h>
#define MAXROW 3
#define MAXCOL 4
int main()
{
int (*p)[MAXCOL];
printf("%d %d\n",sizeof(p),sizeof(*p));
// p = (int (*) [MAXCOL])malloc(MAXROW *sizeof(*p));
printf("%d %d\n",sizeof(p),sizeof(*p));
return 0;
}
2.
#include<stdio.h>
#include<stdlib.h>
#define MAXROW 3
#define MAXCOL 4
int main()
{
int (*p)[MAXCOL];
printf("%d %d\n",sizeof(p),sizeof(*p));
p = (int (*) [MAXCOL])malloc(MAXROW *sizeof(*p));
printf("%d %d\n",sizeof(p),sizeof(*p));
return 0;
}
1.
#include<stdio.h>
#include<stdlib.h>
#define MAXROW 3
#define MAXCOL 4
int main()
{
int (*p)[MAXCOL];
printf("%d %d\n",sizeof(p),sizeof(*p));
// p = (int (*) [MAXCOL])malloc(MAXROW *sizeof(*p));
printf("%d %d\n",sizeof(p),sizeof(*p));
return 0;
}
2.
#include<stdio.h>
#include<stdlib.h>
#define MAXROW 3
#define MAXCOL 4
int main()
{
int (*p)[MAXCOL];
printf("%d %d\n",sizeof(p),sizeof(*p));
p = (int (*) [MAXCOL])malloc(MAXROW *sizeof(*p));
printf("%d %d\n",sizeof(p),sizeof(*p));
return 0;
}
Souvik said:
10 years ago
#include<stdio.h>
#include<stdlib.h>
#define MAXROW 3
#define MAXCOL 4
int main()
{
int (*p)[MAXCOL];
p = (int (*) [MAXCOL])malloc(MAXROW *sizeof(*p));
return 0;
}
What is the difference with this code? It gives the output 24. Please explain.
#include<stdlib.h>
#define MAXROW 3
#define MAXCOL 4
int main()
{
int (*p)[MAXCOL];
p = (int (*) [MAXCOL])malloc(MAXROW *sizeof(*p));
return 0;
}
What is the difference with this code? It gives the output 24. Please explain.
Archana said:
10 years ago
Sizeof (p) = 2 because in p address of allocated memory is stored which is 2 Bytes.
Sizeof (*p) = 8 because *p is pointer to array of 4 Integers 4*2 = 8.
Sizeof (*p) = 8 because *p is pointer to array of 4 Integers 4*2 = 8.
(1)
Ankit said:
1 decade ago
If you compile this code you get output 4, 16. And in answer they put 2, 8.
Arjun said:
1 decade ago
#include<stdio.h>
#include<stdlib.h>
#define MAXROW 3
#define MAXCOL 4
int main()
{
int (*p)[MAXCOL];
p = (int (*) [MAXCOL])malloc(MAXROW *sizeof(*p));
printf("%d, %d\n", sizeof(p), sizeof(*p));
return 0;
}
Could someone explain this code to me?
#include<stdlib.h>
#define MAXROW 3
#define MAXCOL 4
int main()
{
int (*p)[MAXCOL];
p = (int (*) [MAXCOL])malloc(MAXROW *sizeof(*p));
printf("%d, %d\n", sizeof(p), sizeof(*p));
return 0;
}
Could someone explain this code to me?
Sonali jain said:
1 decade ago
Integer takes a 4 bytes and 2 bytes sizeof operator than
2*4 = 8 bytes.
sizeof(*p) = 8 bytes.
2*4 = 8 bytes.
sizeof(*p) = 8 bytes.
Nitika mishra said:
1 decade ago
Why does the line p = (int (*) [MAXCOL])malloc(MAXROW *sizeof(*p)); has no effect?
Can anyone explain its reason in detail. Please?
Can anyone explain its reason in detail. Please?
Post your comments here:
Quick links
Quantitative Aptitude
Verbal (English)
Reasoning
Programming
Interview
Placement Papers