Dynamic Allocation of Memory Space

Similar documents
Programming with Indexed Variables

Fundamental of Programming (C)

Programming. Pointers, Multi-dimensional Arrays and Memory Management

Memory Management. CSC215 Lecture

CSC 270 Survey of Programming Languages. What is a Pointer?

Programming Language B

Reminder of midterm 1. Next Thursday, Feb. 14, in class Look at Piazza announcement for rules and preparations

Memory Allocation. General Questions

Dynamic memory allocation (malloc)

Lecture 5: Multidimensional Arrays. Wednesday, 11 February 2009

Class Information ANNOUCEMENTS

Principles of C and Memory Management

Content. In this chapter, you will learn:

APS105. Malloc and 2D Arrays. Textbook Chapters 6.4, Datatype Size

Dynamic Memory Allocation

Character Strings. String-copy Example

CS 137 Part 5. Pointers, Arrays, Malloc, Variable Sized Arrays, Vectors. October 25th, 2017

Arrays and Pointers. CSE 2031 Fall November 11, 2013

Computer Programming. C Array is a collection of data belongings to the same data type. data_type array_name[array_size];

Dynamic memory allocation

Arrays and Pointers. Arrays. Arrays: Example. Arrays: Definition and Access. Arrays Stored in Memory. Initialization. EECS 2031 Fall 2014.

Dynamic Memory Allocation (and Multi-Dimensional Arrays)

A. Year / Module Semester Subject Topic 2016 / V 2 PCD Pointers, Preprocessors, DS

int marks[10]; // fixed size and fixed address No change in Memory address.

Programming for Electrical and Computer Engineers. Pointers and Arrays

Announcements. assign0 due tonight. Labs start this week. No late submissions. Very helpful for assign1

Procedural programming with C

Quick review pointer basics (KR ch )

Dynamically Allocated Memory in C

Lecture 8 Dynamic Memory Allocation

C Programming Language

Computer Programming Unit 3

PDS: CS Computer Sc & Engg: IIT Kharagpur 1. for Statement

Intermediate Programming, Spring 2017*

C for Java Programmers 1. Last Week. Overview of the differences between C and Java. The C language (keywords, types, functies, etc.

ch = argv[i][++j]; /* why does ++j but j++ does not? */

Dynamic Memory. Dynamic Memory Allocation Strings. September 18, 2017 Hassan Khosravi / Geoffrey Tien 1

C Pointers. Abdelghani Bellaachia, CSCI 1121 Page: 1

C: Pointers. C: Pointers. Department of Computer Science College of Engineering Boise State University. September 11, /21

Jagannath Institute of Management Sciences Lajpat Nagar. BCA II Sem. C Programming

In Java we have the keyword null, which is the value of an uninitialized reference type

Example: Pointer Basics

POINTER & REFERENCE VARIABLES

High-performance computing and programming Intro to C on Unix/Linux. Uppsala universitet

SYSC 2006 C Winter 2012

Declaring Pointers. Declaration of pointers <type> *variable <type> *variable = initial-value Examples:

CS 261 Data Structures. Introduction to C Programming

Pointers. September 13, 2017 Hassan Khosravi / Geoffrey Tien 1

Lab Exam 1 D [1 mark] Give an example of a sample input which would make the function

C Tutorial. Pointers, Dynamic Memory allocation, Valgrind, Makefile - Abhishek Yeluri and Yashwant Reddy Virupaksha

C PROGRAMMING Lecture 5. 1st semester

Subject: Fundamental of Computer Programming 2068

QUIZ: loops. Write a program that prints the integers from -7 to 15 (inclusive) using: for loop while loop do...while loop

Arrays and Pointers in C. Alan L. Cox

Maltepe University Computer Engineering Department. BİL 133 Algoritma ve Programlama. Chapter 8: Arrays and pointers

PDS Class Test 2. Room Sections No of students

Arrays, Pointers, and Strings

Memory Allocation in C

CS 108 Computing Fundamentals. October/November Array Bootcamp

2-D Arrays. Of course, to set each grid location to 0, we have to use a loop structure as follows (assume i and j are already defined):

19-Nov CSCI 2132 Software Development Lecture 29: Linked Lists. Faculty of Computer Science, Dalhousie University Heap (Free Store)

Lesson 7. Reading and Writing a.k.a. Input and Output

APS105. Collecting Elements 10/20/2013. Declaring an Array in C. How to collect elements of the same type? Arrays. General form: Example:

C Programming Language: C ADTs, 2d Dynamic Allocation. Math 230 Assembly Language Programming (Computer Organization) Thursday Jan 31, 2008

Arrays and Pointers. Lecture Plan.

Chapter 12: Pointers and Arrays. Chapter 12. Pointers and Arrays. Copyright 2008 W. W. Norton & Company. All rights reserved.

Module 6: Array in C

This code has a bug that allows a hacker to take control of its execution and run evilfunc().

ECE551 Midterm Version 1

Week 8: Arrays and File I/O. BJ Furman 21OCT2009

Memory (Stack and Heap)

CS C Primer. Tyler Szepesi. January 16, 2013

POINTER AND ARRAY SUNU WIBIRAMA

Array Initialization

Computer Science & Engineering 150A Problem Solving Using Computers

Q1 (15) Q2 (15) Q3 (15) Q4 (15) Total (60)

Pointers. Introduction

Lecture 14. Dynamic Memory Allocation

Variation of Pointers

CSE2301. Dynamic memory Allocation. malloc() Dynamic Memory Allocation and Structs

At this time we have all the pieces necessary to allocate memory for an array dynamically. Following our example, we allocate N integers as follows:

ESc101: Pointers and Arrays

Arrays. Example: Run the below program, it will crash in Windows (TurboC Compiler)

MTH 307/417/515 Final Exam Solutions

211: Computer Architecture Summer 2016

MODULE Z THE C STORAGE CLASSES, SCOPE AND MEMORY ALLOCATION

UNDERSTANDING THE COMPUTER S MEMORY

CSC 1600 Memory Layout for Unix Processes"

Dynamic Memory. R. Inkulu (Dynamic Memory) 1 / 19

Arrays in C. Data and File Structures Laboratory. DFS Lab (ISI) Arrays in C 1 / 1

Pointers (part 1) What are pointers? EECS We have seen pointers before. scanf( %f, &inches );! 25 September 2017

advanced data types (2) typedef. today advanced data types (3) enum. mon 23 sep 2002 defining your own types using typedef

ECE551 Midterm Version 2

Answer all questions. Write your answers only in the space provided. Full marks = 50

These problems are provided to you as a guide for practice. The questions cover important concepts covered in class.

Ricardo Rocha. Department of Computer Science Faculty of Sciences University of Porto

Lab 3. Pointers Programming Lab (Using C) XU Silei

CS11001/CS11002 Programming and Data Structures (PDS) (Theory: 3-1-0)

Q1 (15) Q2 (15) Q3 (15) Q4 (15) Total (60)

MODULE V: POINTERS & PREPROCESSORS

Transcription:

C Programming 1 Dynamic Allocation of Memory Space

C Programming 2 Run-Time Allocation of Space The volume of data may not be known before the run-time. It provides flexibility in building data structures. The space may be allocated in the global data area (not on the stack) called heap and the data does not evaporate at the end of a function call.

C Programming 3 Run-Time Allocation of 1D Array on Stack We can allocate one or multi-dimensional array on the run-time stack whose size is unknown at the compilation time (ISO C99). But this data is local to a function. So it is not available beyond the life-time of the function.

C Programming 4 Run-Time Allocation of 1D Array on Stack #include <stdio.h> int main(){ // 1Darray1.c int size, i; printf("enter the number of elements: "); scanf("%d", &size); int a[size]; printf("enter %d integers: ", size); for(i=0; i<size; ++i) scanf("%d", &a[i]); printf("data in reverse order: "); for(i=size-1; i>=0; --i) printf("%d ", a[i]); putchar( \n ); return 0; }

C Programming 5 Not Permitted #include <stdio.h> int main() // 1Darray1a.c { int size, a[size], i; // not permitted // works if size is initialized // with some value. printf("enter the number of elements: "); scanf("%d", &size);...

C Programming 6 Not Permitted $ cc -Wall 1Darray1a.c $ a.out Segmentation fault (core dumped)

C Programming 7 Dynamic 1D Array as Parameter Parameter passing is identical. #include <stdio.h> int elmsum(int x[], int size){ // 1Darray2.c int sum=0, i; for(i=0; i<size; ++i) sum += x[i]; return sum; } int main() // 1Darray2.c { int size, i;

C Programming 8 printf("enter the number of elements: "); scanf("%d", &size); int a[size]; printf("enter %d integers: ", size); for(i=0; i<size; ++i) scanf("%d", &a[i]); printf("input data: "); for(i=0; i<size; ++i) printf("%d ", a[i]); putchar( \n ); printf("sum of elements: %d\n", elmsum(a,size)); return 0; }

C Programming 9 Run-Time Allocation of 2D Array on Stack #include <stdio.h> int main() // 2Darray1.c { int row, col, i, j; printf("enter the number of rows: "); scanf("%d", &row); printf("enter the number of cloumns: "); scanf("%d", &col); int a[row][col]; printf("enter data in row-major order:\n" ); for(i=0; i<row; ++i)

C Programming 10 for(j=0; j<col; ++j) scanf("%d", &a[i][j]); printf("input Data:\n"); for(i=0; i<row; ++i){ for(j=0; j<col; ++j) printf("%d ", a[i][j]); putchar( \n ); } } return 0;

C Programming 11 Run-Time Allocation of 2D Array on Stack int main() // 2Darray1a.c { int row=0, col=0, a[row][col], i, j;... // Acceptable, but...

C Programming 12 Run-Time 2D Array as Parameter #include <stdio.h> int sumofelm(int col, int x[][col], int row){ int i, j, sum = 0; // 2Darray2.c for(i=0; i<row; ++i) for(j=0; j<col; ++j) sum += x[i][j]; return sum; } int main() // 2Darray2.c { int row, col, i, j;

C Programming 13 printf("enter the number of rows: "); scanf("%d", &row); printf("enter the number of columns: "); scanf("%d", &col); int a[row][col]; printf("enter data in row-major order:\n" ); for(i=0; i<row; ++i) for(j=0; j<col; ++j) scanf("%d", &a[i][j]); printf("input Data:\n"); for(i=0; i<row; ++i){ for(j=0; j<col; ++j) printf("%d ", a[i][j]);

C Programming 14 putchar( \n ); } printf("sum of elements: %d\n", sumofelm(col, a, row)); } return 0;

C Programming 15 Not Permitted int sumofelm(int x[][col], int col, int row){ $ cc -Wall 2Darray2a.c 2Darray2a.c:3:22: error: col undeclared here (not in a function) 2Darray2a.c: In function main: 2Darray2a.c:30:5: error: type of formal parameter 1 is incomplete

C Programming 16 Global Array #include <stdio.h> #define MAX 100 int data[max]; int sum(int); int main() // global1.c { int n, i; printf("enter the number of data: "); scanf("%d", &n); printf("enter %d data: ", n); for(i=0; i<n; ++i) scanf("%d", &data[i]); printf("sum: %d\n", sum(n)); return 0;

C Programming 17 } int sum(int n){ if(!n) return 0; return data[n-1]+sum(n-1); }

C Programming 18 Note The global array data[max] is available to both main() and sum(). It is not necessary to pass it as a parameter. Its size is fixed.

C Programming 19 Not Permitted #include <stdio.h> int n, data[n]; int sum(int); int main() // global2.c {... $ cc -Wall global2.c global2.c:3:8: error: variably modified data at file scope

C Programming 20 Global Data It is necessary to allocate data area at run-time that is available across the function boundary. This requirement is met in C by allocating memory space in a region called heap. C library provides support for this allocation.

C Programming 21 void *malloc(size t n) The C library function malloc() is used to request for an allocation of n bytes of contiguous memory space in the special global data area called heap. After a successful allocation, the function returns a generic pointer void * that can be casted to any required type.

C Programming 22 void *malloc(size t n) If malloc() fails to allocate the requested space, it returns a NULL pointer. The interface of the function is defined in the header file stdlib.h. So it is to be included.

C Programming 23 Note The function malloc() sends a request to the OS for more heap space. OS supplies in multiples of a fixed chunk of memory block e.g. multiples of 4 Kbytes. The local memory management module of malloc() manages the available memory.

C Programming 24 Pointer Variables and Array We deal with different types of pointers to use the memory allocated by malloc(). Consider the following variable declarations: int *p, (*q)[5], *r[3], **s ; The variable p is of type int *. It can store the address of a location of type int. When p is incremented by i i.e. p + i is computed, the value is (unsigned)p + i sizeof(int).

C Programming 25 Pointer Variables and Array int *p, (*q)[5], *r[3], **s ; The variable q is of type int (*)[5]. It also stores an address but its arithmetic is different from p. The value of q + i is (unsigned)q + i 5 sizeof(int). It may be viewed as a pointer to an 1-D array of five (5) locations of type int. The arithmetic of q is identical to the arithmetic of a in int a[3][5].

C Programming 26 Pointer Variables and Array int *p, (*q)[5], *r[3], **s ; r is not a variable but a constant. Its value is the address of the 0 th location of the array of three (3) locations, each of type int *. Naturally r + i is (unsigned)r + i sizeof(int *).

C Programming 27 Pointer Variables and Array int *p, (*q)[5], *r[3], **s ; Finally the variable s is of type int **. It can store the address of a location of type int *. The meaning of s + i is (unsigned)s + i sizeof(int *). It is a pointer to an int pointer, so the arithmetic of r and s are identical.

C Programming 28 C Program #include <stdio.h> #include <stdlib.h> int main() // pointvar.c { int *p, (*q)[5], *r[3], **s; printf("sizeof(int): %lu\n", sizeof(int)); printf("sizeof(int *): %lu\n", sizeof(int *)); printf("sizeof(int [5]): %lu\n", sizeof(int [5])); printf("sizeof(int (*)[5]): %lu\n", sizeof(int (*)[5])) printf("sizeof(int **): %lu\n", sizeof(int **)); putchar( \n );

C Programming 29 printf("p: %p\tp+1: %p\n", p, p+1); printf("q: %p\tq+1: %p\n", q, q+1); printf("r: %p\tr+1: %p\n", r, r+1); printf("s: %p\ts+1: %p\n", s, s+1); return 0; } // pointvar.c

C Programming 30 Output $ cc -Wall pointvar.c $./a.out sizeof(int): 4 sizeof(int *): 8 sizeof(int [5]): 20 sizeof(int (*)[5]): 8 sizeof(int **): 8 p: 0x2c5ff4 p+1: 0x2c5ff8 q: 0x80496d0 q+1: 0x80496e4 r: 0xbfe53600 r+1: 0xbfe53608 s: 0x80482b5 s+1: 0x80482bd

C Programming 31 1-D Array of n Elements We can use a variable of type int * and a call to malloc() to create an 1-D array of n elements of type int, where n is an input data.

C Programming 32 Dynamic 1-D Array #include <stdio.h> #include <stdlib.h> int main() // dynamic1d.c { int *p, n, i, val = 1 ; printf("enter a +ve integer: "); scanf("%d", &n); p = (int *)malloc(n*sizeof(int)); for(i=0; i<n; ++i) { p[i] = val; val = 2*val; }

C Programming 33 for(i=0; i<n; ++i) printf("%d ",p[i]); putchar( \n ); return 0; } // dynamic1d.c

C Programming 34 p[0] p[9] p in the stack frame of main() Dynamically Allocated Memory Globally accessible space

C Programming 35 Output $ cc -Wall dynamic1d.c $./a.out Enter a +ve integer: 10 1 2 4 8 16 32 64 128 256 512

C Programming 36 Allocation and Type Casting p = (int *) malloc(n*sizeof(int)); The function malloc() allocates a contiguous memory area of size n sizeof(int) bytes. It returns the starting address as a void * pointer. The pointer is casted to the type int * and is assigned to the variable p.

C Programming 37 Accessing the Area The area can be accessed as a 1-D array of int due to the equivalence of p[i] and *(p+i). But unlike an array name, p is a variable, so the dynamically created array may be lost if p is assigned a different address-value. The space is allocated in the global data area (heap) and is available from other parts of the program.

C Programming 38... what(...) { int a[10], *p ; p = (int *) malloc(10*sizeof(int)) ; p[0] p[9] p Static Alloc in Stack Frame Dynamic Alloc in Global Data Area a a[0] a[9] Static Alloc in Stack Frame

C Programming 39 Allocation in Different Areas #include <stdio.h> #include <stdlib.h> int g[5]; // global int main() // memoryarea.c { int a[5], *p, n ; static int s[5] ; scanf("%d", &n); int b[n]; p=(int *)malloc(20) ;

C Programming 40 printf("g: %p\ts: %p\tp: %p\ta: %p\tb: %p\n", g, s, p, a, b) ; return 0; } // memoryarea.c

C Programming 41 Output $ cc -Wall memoryalloc.c $./a.out $ 100 g: 0x601060 s: 0x601040 p: 0x1190010 a: 0x7fff24f73180 b: 0x7fff24f73160

C Programming 42 Note The allocated space for the local array a[] and b[] (on stack) are far away from the global array g[] and the local static array s[] (data area). The dynamically allocated memory pointed by p is again at a different region called heap.

C Programming 43 Simple Use #include <stdio.h> #include <stdlib.h> int *createarray(int n){ // dynamic1da.c int *p,i, val=1; } p = (int *)malloc(n*sizeof(int)); for(i=0; i<n; ++i) { p[i] = val; val = 2*val; } return p;

C Programming 44 int main() { int *p, n, i ; printf("enter a +ve integer: "); scanf("%d", &n); p = createarray(n); for(i=0; i<n; ++i) printf("%d ",p[i]); putchar( \n ); return 0; } // dynamic1da.c

C Programming 45 Dynamic Allocation of 2-D Array n 5 We can use the pointer int (*q)[5] to allocate space for a 2-D array of n rows and at most 5 columns.

C Programming 46 #include <stdio.h> #include <stdlib.h> int main() // dynamic2d1.c { int (*q)[5],rows,i,j; printf("enter the number of Rows: ") ; scanf("%d", &rows); q=(int (*)[5])malloc(rows*5*sizeof(int)); for(i=0; i<rows; ++i) for(j=0; j<5; ++j) q[i][j]=2*i+3*j ; for(i=0; i<rows; ++i) { for(j=0; j<5; ++j) printf("%d ", q[i][j]); printf("\n");

C Programming 47 } return 0; } // dynamic2d1.c

C Programming 48 Output $ cc -Wall dynamic2d1.c $./a.out Enter the number of Rows: 3 0 3 6 9 12 2 5 8 11 14 4 7 10 13 16

C Programming 49... what(...) { int (*q)[5] ; q=(int (*)[5])malloc(rows*5*sizeof(int)) q[0][0] q[1][0] q[2][0] q Dynamically Allocated Memory

C Programming 50 n 5 2-D Array q points to the 0 th row of 5-element array. q+i points to the i th row of the 5-element array. *q is the 0 th row, address of q[0][0] i.e. &q[0][0]. *q+j is the address of q[0][j], &q[0][j].

C Programming 51 n 5 2-D Array *(q+i)+j is the address of q[i][j], &q[i][j]. **q is q[0][0]. *(*q+j) is q[0][j]. *(*(q+i)+j) is q[i][j].

C Programming 52 Return Value #include <stdio.h> #include <stdlib.h> int (*nby5array(int row))[5]{ // dynamic2d1a.c int (*q)[5], i, j; q=(int (*)[5])malloc(row*5*sizeof(int)); for(i=0; i<row; ++i) for(j=0; j<5; ++j) q[i][j]=2*i+3*j ; return q; }

C Programming 53 int main() { int (*q)[5],rows,i,j; printf("enter the number of Rows: ") ; scanf("%d", &rows); q = nby5array(rows); for(i=0; i<rows; ++i) { for(j=0; j<5; ++j) printf("%d ", q[i][j]); printf("\n"); } return 0; } // dynamic2d1.c

C Programming 54 Parameter Passing #include <stdio.h> #include <stdlib.h> #define MAXCOL 50 int sumall(int q[][maxcol], int row, int col){ int i, j, sum = 0; // dynamic2d1b.c } for(i=0; i<row; ++i) for(j=0; j<col; ++j) sum += q[i][j]; return sum;

C Programming 55 int main() { int (*q)[maxcol],rows, cols, i,j; printf("enter the number of Rows: ") ; scanf("%d", &rows); printf("enter the number of Columns <= %d: ", MAXCOL) ; scanf("%d", &cols); q=(int (*)[MAXCOL])malloc(rows*MAXCOL* sizeof(int)); for(i=0; i<rows; ++i) for(j=0; j<cols; ++j) q[i][j]=2*i+3*j ;

C Programming 56 printf("data in the array:\n"); for(i=0; i<rows; ++i) { for(j=0; j<cols; ++j) printf("%d ", q[i][j]); printf("\n"); } printf("sum of elements: %d\n", sumall(q, rows, cols)); return 0; } // dynamic2d1.c

C Programming 57 Dynamic Allocation of Using int *r[3] We can allocate a 2D array like structure with at most three rows and variable number of columns using int *r[3]. In fact number of elements in different rows may also be different.

C Programming 58 #include <stdio.h> #include <stdlib.h> int main() // dynamic2d2.c { int *r[3], i, j; for(i=0; i<3; ++i) { int col = 2*(i+1) ; r[i] = (int *) malloc(col*sizeof(int)) ; } for(j=0; j<col; ++j) r[i][j] = i+j ; for(i=0; i<3; ++i) { int col = 2*(i+1) ; for(j=0; j<col; ++j)

C Programming 59 printf("%d ", r[i][j]) ; printf("\n"); } return 0; } // dynamic2d2.c

C Programming 60 Output $ cc -Wall dynamic2d2.c $./a.out 0 1 1 2 3 4 2 3 4 5 6 7

C Programming 61 r[0] r int *r[3] ; r[2] Static Alloc 1 D Array of Pointers Dynamically Allocated Memor

C Programming 62 Note r[i] is the i th pointer stores the address of the 0 th element of the i th row. So r[i] + j is the address of the j th element of the i th row and *(r[i] + j), same as r[i][j], is the j th element of the i th row.

C Programming 63 Parameter Passing #include <stdio.h> #include <stdlib.h> #define MAXROW 50 void printarray(int *r[], int row, int col){ int i, j; // dynamic2d2a.c } for(i=0; i<row; ++i) { for(j=0; j<col; ++j) printf("%d ", r[i][j]) ; printf("\n"); }

C Programming 64 int main() { int *r[maxrow], row, col, i, j; printf("enter the number of rows <= %d: ", MAXROW); scanf("%d", &row); printf("enter the number of cols: "); scanf("%d", &col); for(i=0; i<row; ++i) { r[i] = (int *) malloc(col*sizeof(int)) ; for(j=0; j<col; ++j) r[i][j] = i+j ; } printarray(r,row, col); return 0; } // dynamic2d2a.c

C Programming 65 Dynamic Allocation of r c Array We can allocate a 2-D array of variable number of rows and columns, where both the number of rows and the number of columns are inputs.

C Programming 66 #include <stdio.h> #include <stdlib.h> int main() // dynamic2d3.c { int **s, row, column, i, j; printf("enter Row & Column:\n") ; scanf("%d%d", &row, &column) ; s = (int **) malloc(row*sizeof(int *)) ; for(i=0; i<row; ++i) { s[i] = (int *) malloc(column*sizeof(int)) ; for(j=0; j<column; ++j) s[i][j] = i+j ; }

C Programming 67 for(i=0; i<row; ++i) { for(j=0; j<column; ++j) printf("%d ", s[i][j]) ; printf("\n") ; } return 0; } // dynamic2d3.c

C Programming 68 Output $ cc -Wall dynamic2d3.c $./a.out Enter Row & Column: 3 5 0 1 2 3 4 1 2 3 4 5 2 3 4 5 6

C Programming 69 int **s ; s Static Allocation s[0] s[2] Dynamically Allocated Memor

C Programming 70 Note s + i is the address of the i th element of the pointer array. *(s + i), same as s[i], is the i th element of the pointer array that stores the address of the 0 th element of the i th row. s[i] + j is the address of the j th element of the i th row. *(s[i] + j), same as s[i][j] is the j th element of the i th row.

C Programming 71 Parameter Passing #include <stdio.h> #include <stdlib.h> void printarray(int **s, int row, int col){ int i, j ; // dynamic2d3.c } for(i=0; i<row; ++i) { for(j=0; j<col; ++j) printf("%d ", s[i][j]) ; printf("\n") ; }

C Programming 72 int main(){ // dynamic2d3.c int **s, row, column, i, j; printf("enter Row & Column:\n") ; scanf("%d%d", &row, &column) ; s = (int **) malloc(row*sizeof(int *)) ; for(i=0; i<row; ++i) { s[i] = (int *) malloc(column*sizeof(int)) ; for(j=0; j<column; ++j) s[i][j] = i+j ; } printarray(s, row, column); return 0; } // dynamic2d3a.c

C Programming 73 Related Other Functions There are other related function for dynamic allocation of memory. void *calloc(int numofelements, int size). Here we can specify the number of elements of particular sizes. If there is a structure student and we like to allocate space for n students, we call (student *)calloc(n, sizeof(student)).

C Programming 74 Related Other Functions As we mentioned earlier, the local memory manager manages the heap area. The library function void free(void *) releases the area no longer required by the program to the memory manager for reuse.

C Programming 75 Related Other Functions It may be necessary to change the size of the allocated area. The function void *realloc(void *p, int n) changes the size of the memory block pointed by p to n bytes. If the value of n is greater than or equal to the already allocated size, the original data is unaltered but the new memory is uninitialized.

C Programming 76 #include <stdio.h> #include <stdlib.h> int *ret1darray(int *); int main() { int n, *p, i ; Use of realloc() printf("enter a +ve integer: "); scanf("%d", &n); p = ret1darray(&n); printf("\ndata are: "); for(i=0; i<n; ++i) printf("%d ", p[i]);

C Programming 77 putchar( \n ); return 0; } #define MAX 5 int *ret1darray(int *np){ int n, max = MAX, *p = (int *)malloc(max*sizeof(int)); printf("enter data, terminate by Ctrl+D: "); n = 0; while(scanf("%d", &p[n])!= EOF){ ++n ; if(n == max) p=(int*)realloc(p,sizeof(int)*(max += MAX));

C Programming 78 } *np = n ; return p; } // retdynarray2.c