Pointers and dynamic memory
malloc, calloc, realloc, free Allocate block of memory malloc - void* malloc(size_t size) //unsigned int calloc realloc free - deallocate block of memory Memory (heap) 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219
malloc, calloc, realloc, free Memory (heap) 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 Allocate block of memory malloc - void* malloc(size_t size) //unsigned int void *p = malloc(4) print p //200
malloc, calloc, realloc, free Memory (heap) 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 Allocate block of memory malloc - void* malloc(size_t size) //unsigned int int *p = (int*) malloc(3*sizeof(int)) print p //200 *p = 2 *(p+1) = 4 *(p+2) = 5
malloc, calloc, realloc, free Memory (heap) 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 Allocate block of memory malloc - void* malloc(size_t size) //unsigned int int *p = (int*) malloc(3*sizeof(int)) print p //200 p[0] = 2 p[1] = 4 p[2] = 5
malloc, calloc, realloc, free Allocate block of memory malloc - void* malloc(size_t size) //unsigned int calloc - void* calloc(size_t num, size_t size) int *p = (int*) calloc(3, sizeof(int)) Memory (heap) 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219
malloc, calloc, realloc, free Allocate block of memory malloc - void* malloc(size_t size) //unsigned int calloc - void* calloc(size_t num, size_t size) realloc - void* realloc(void *ptr, size_t size) Memory (heap) 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219
#include<stdio. h> #include<stdlib #include<stdio.h> #include<stdlib.h> int main() { int n, i; printf("Enter size of array\n"); scanf("%d",&n); int A[n]; for (i = 0; i < n; i++) A[i] = 1+i; printf("the value is %d\n", A[i]); }
malloc #include<stdio.h> #include<stdlib.h> int main() { int n, i; printf("Enter size of array\n"); scanf("%d",&n); int *A = (int*) malloc(n*sizeof(int)); //dynamically allocated array for (i = 0; i < n; i++) A[i] = 1+i; printf("%d ", A[i]); }
calloc #include<stdio.h> #include<stdlib.h> int main() { int n, i; printf("Enter size of array\n"); scanf("%d",&n); int *A = (int*) calloc(n,sizeof(int)); //dynamically allocated array for (i = 0; i < n; i++) A[i] = 1+i; printf("%d ", A[i]); }
calloc #include<stdio.h> #include<stdlib.h> int main() { int n, i; printf("Enter size of array\n"); scanf("%d",&n); int *A = (int*) calloc(n,sizeof(int)); //dynamically allocated array for (i = 0; i < n; i++) printf("%d ", A[i]); }
free #include<stdio.h> #include<stdlib.h> int main() { int n, i; printf("Enter size of array\n"); scanf("%d",&n); int *A = (int*) malloc(n*sizeof(int)); //dynamically allocated array for (i = 0; i < n; i++) A[i] = 1+i; free(A); printf("%d ", A[i]); }
free #include<stdio.h> #include<stdlib.h> int main() { int n, i; printf("Enter size of array\n"); scanf("%d",&n); int *A = (int*) malloc(n*sizeof(int)); //dynamically allocated array for (i = 0; i < n; i++) A[i] = 1+i; //free(A); printf("%d ", A[i]); }
free #include<stdio.h> #include<stdlib.h> int main() { int n, i; printf("Enter size of array\n"); scanf("%d",&n); int *A = (int*) malloc(n*sizeof(int)); //dynamically allocated array for (i = 0; i < n; i++) A[i] = 1+i; free(A); A[3] = 9; printf("%d ", A[i]); }
free #include<stdio.h> #include<stdlib.h> int main() { int n, i; printf("Enter size of array\n"); scanf("%d",&n); int *A = (int*) malloc(n*sizeof(int)); //dynamically allocated array for (i = 0; i < n; i++) A[i] = 1+i; free(A); A = NULL; //Adjust pointer to NULL after free printf("%d ", A[i]); }
realloc #include<stdio.h> #include<stdlib.h> int main() { int n, i; printf("Enter size of array\n"); scanf("%d",&n); int *A = (int*) malloc(n*sizeof(int)); //dynamically allocated array for (i = 0; i < n; i++) A[i] = 1+i; int *B = (int*) realloc(A, 2*n*sizeof(int)); printf("Previous block address = %p, new address = %p\n", A,B); for (i = 0; i < 2*n; i++) printf("%d\n", B[i]); }
realloc #include<stdio.h> #include<stdlib.h> int main() { int n, i; printf("Enter size of array\n"); scanf("%d",&n); int *A = (int*) malloc(n*sizeof(int)); //dynamically allocated array for (i = 0; i < n; i++) A[i] = 1+i; int *B = (int*) realloc(A, 2*n*sizeof(int)); printf("Previous block address = %p, new address = %p\n", A,B); for (i = 0; i < 2*n; i++) printf("%d\n", B[i]); }
realloc #include<stdio.h> #include<stdlib.h> int main() { int n, i; printf("Enter size of array\n"); scanf("%d",&n); int *A = (int*) malloc(n*sizeof(int)); //dynamically allocated array for (i = 0; i < n; i++) A[i] = 1+i; int *B = (int*) realloc(A, (n/2)*sizeof(int)); printf("Previous block address = %p, new address = %p\n", A,B); printf("%d\n", B[i]); }
realloc as free #include<stdio.h> #include<stdlib.h> int main() { int n, i; printf("Enter size of array\n"); scanf("%d",&n); int *A = (int*) malloc(n*sizeof(int)); //dynamically allocated array for (i = 0; i < n; i++) A[i] = 1+i; int *B = (int*) realloc(A, 0); //equivalent to free(A) printf("Previous block address = %p, new address = %p\n", A,B); printf("%d\n", B[i]); }
realloc as malloc #include<stdio.h> #include<stdlib.h> int main() { int n, i; printf("Enter size of array\n"); scanf("%d",&n); int *A = (int*) malloc(n*sizeof(int)); //dynamically allocated array for (i = 0; i < n; i++) A[i] = 1+i; int *B = (int*) realloc(NULL, n*sizeof(int)); //equivalent to malloc printf("Previous block address = %p, new address = %p\n", A,B); printf("%d\n", B[i]); }