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