Computer History Notes - Herong's Tutorial Notes - v3.13, by Herong Yang
Sample C Program for Dynamic Memory Allocation - malloc()
This section provides a sample C program using dynamic memory allocation function, malloc().
Another main feature of the C language is dynamic memory allocation using the built-in function, malloc(). Here is sample code, sort.c, that reads in a text file, stores each line as a string in dynamically allocate memory, and sort all lines (Source: "The C Book" by Mike Banahan, et al.):
#include <stdio.h> #include <stdlib.h> #include <string.h> #define MAXSTRING 50 /* max no. of strings */ #define MAXLEN 80 /* max length. of strings */ void print_arr(const char **p_array); void sort_arr(const char **p_array); char *next_string(void); main(){ char **p_array; int nstrings; /* count of strings read */ p_array = (char **)malloc( sizeof(char *[MAXSTRING+1])); if(p_array == 0){ printf("No memory\n"); exit(EXIT_FAILURE); } nstrings = 0; while(nstrings < MAXSTRING && (p_array[nstrings] = next_string()) != 0){ nstrings++; } p_array[nstrings] = 0; /* terminate p_array */ sort_arr(p_array); print_arr(p_array); exit(EXIT_SUCCESS); } void print_arr(const char **p_array){ while(*p_array) printf("%s\n", *p_array++); } void sort_arr(const char **p_array){ const char **lo_p, **hi_p, *tmp; for(lo_p = p_array; *lo_p != 0 && *(lo_p+1) != 0; lo_p++){ for(hi_p = lo_p+1; *hi_p != 0; hi_p++){ if(strcmp(*hi_p, *lo_p) >= 0) continue; tmp = *hi_p; *hi_p = *lo_p; *lo_p = tmp; } } } char *next_string(void){ char *cp, *destination; int c; destination = (char *)malloc(MAXLEN); if(destination != 0){ cp = destination; while((c = getchar()) != '\n' && c != EOF){ if(cp-destination < MAXLEN-1) *cp++ = c; } *cp = 0; if(c == EOF && cp == destination) return(0); } return(destination); }
Here is a test of sort.c on sorting the first 10 lines of sort.c source code:
\tmp>head sort.c | \local\tcc\tcc -run sort.c char **p_array; #define MAXLEN 80 /* max length. of strings */ #define MAXSTRING 50 /* max no. of strings */ #include <stdio.h> #include <stdlib.h> #include <string.h> char *next_string(void); main(){ void print_arr(const char **p_array); void sort_arr(const char **p_array);
Table of Contents
2002 - .NET Framework Developed by Microsoft
1995 - PHP: Hypertext Preprocessor Created by Rasmus Lerdorf
1995 - Java Language Developed by Sun Microsystems
1991 - WWW (World Wide Web) Developed by Tim Berners-Lee
1991 - Gopher Protocol Created by a University of Minnesota Team
1984 - X Window System Developed a MIT Team
1984 - Macintosh Developed by Apple Inc.
1983 - "Sendmail" Mail Transfer Agent Developed by Eric Allman
1979 - The Tcsh (TENEX C Shell) Developed by Ken Greer
1978 - Bash (Bourne-Again Shell) Developed by Brian Fox
1978 - The C Shell Developed by Bill Joy
1977 - The Bourne Shell Developed by Stephen Bourne
1977 - Apple II Designed by Steve Jobs and Steve Wozniak
1976 - vi Text Editor Developed by Bill Joy
1974 - Internet by Vinton Cerf
►1972 - C Language Developed by Dennis Ritchie
Compilation and Execution Process of C Programs
Sample C Program for Arrays and Pointers
►Sample C Program for Dynamic Memory Allocation - malloc()
1971 - FTP Protocol Created by Abhay Bhushan
1970 - UNIX Operating System Developed by AT&T Bell Labs