⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ex_malloc.c

📁 TI公司的CCS一些常用的函数库
💻 C
字号:
//////////////////////////////////////////////////////////////////////////
////                          EX_MALLOC.C                             ////
////                                                                  ////
////	This program demonstrates the use of malloc() to allocate a   ////
////	block of memory. The user can add or delete words from a      ////
////	list, or show the lists contents. When the user instructs     ////
////	the program to add a new word, malloc() is used to allocate   ////
////	memory for a new cell. free() is used to deallocate the       ////
////	memory when the user instructs to delete a cell. When the user////
////	wants to know the contents of the list, the contents of each  ////
////	cell is displayed. A pointer to the next cell is also stored  ////
////	in a cell. This is used to cycle through the list.            ////
////                                                                  ////
////  This example will work with the PCM and PCH compilers.  The     ////
////  following conditional compilation lines are used to include a   ////
////  valid device for each compiler.  Change the device, clock and   ////
////  RS232 pins for your hardware if needed.                         ////
//////////////////////////////////////////////////////////////////////////
////        (C) Copyright 1996,2003 Custom Computer Services          ////
//// This source code may only be used by licensed users of the CCS   ////
//// C compiler.  This source code may only be distributed to other   ////
//// licensed users of the CCS C compiler.  No other use,             ////
//// reproduction or distribution is permitted without written        ////
//// permission.  Derivative programs created using this software     ////
//// in object code form are not restricted in any way.               ////
//////////////////////////////////////////////////////////////////////////


#if defined(__PCM__)
#include <16F877.h>
#device *=16
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)  // Jumpers: 8 to 11, 7 to 12

#elif defined(__PCH__)
#include <18F452.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)  // Jumpers: 8 to 11, 7 to 12
#endif

// Includes the functionality for malloc()
#include <STDLIBM.H>

// Included for get_int()
#include <STDLIB.H>

// Included for get_string()
#include <input.c>

struct Cell
{
	char text[10];							// Stores text up to 10 characters
	struct Cell* nextCell;				// A pointer to the next cell
};


void main()
{
	unsigned int num;						// Used to get a number for deleting a cell
	char key;								// Stores the key pressed for user input
	unsigned int count;					// Create a counter for the for loop
	struct Cell* beginCell;				// Create a pointer to the first cell
	struct Cell* endCell;				// Create a pointer for the last cell
	struct Cell* pCell;					// Create a Cell pointer
	struct Cell* pCell2;					// Create another Cell pointer

	beginCell = malloc(sizeof(Cell));// Allocates memory using malloc()
	endCell = beginCell;					// Set the end equal to the beginning
	beginCell->nextCell = NULL;		// Initialize the pointers
	pCell = NULL;
	pCell2 = NULL;

	while(TRUE){							// Loop forever
		do{									// Loops until a, d, or s is pressed.
			printf("\nPress 'a' to add a word, 'd' to delete a word,");
			printf(" or 's' to show the entered words.");
			key = getch();			// Gets a key
		}while(key != 'a' && key != 'd' && key != 's');

		if(key == 'a')	// If a was pressed, then add a cell
		{
         endCell->nextCell = malloc(sizeof(Cell)); // Allocate memory for a new cell
			if(endCell->nextCell != NULL)			// Check if memory was allocated
			{
				printf("\nEnter a word: ");		// Prompt the user for a word
				get_string(endCell->text, 10);	// Get the word and store it in the new cell
				endCell = endCell->nextCell;  	// Set the end cell to the new cell
				endCell->nextCell = NULL;			// Set the new Cell's next pointer to NULL
			}
		}
		else if(key == 's')	// If s was pressed, then show the text in every cell
		{
			pCell = beginCell;						// Set a pointer to the first cell
			count = 1;									// Set the word counter at 1
			while(pCell != endCell){				// Loops until the pointer is NULL
				printf("\nWord %u: %s", count, pCell);// Output the text stored in the cell
				pCell = pCell->nextCell;			// Set the cell pointer to the next cell
				++count;
			}
		}
		else if(key == 'd')	// If d was pressed, then delete a cell
		{
			printf("\nWhich word number would you like to delete?\n ");
			num = get_long();								// Get the word number to delete
			pCell2 = pCell = beginCell;				// Set a pointer to the first cell
			
			for(count=1; count<num && pCell != endCell; ++count){
				pCell2 = pCell;							// Save the pointer
				pCell = pCell->nextCell;				// Set the cell pointer to the next cell
			}

			if(pCell != endCell && num > 0){			// Check for valid pointer
				pCell2->nextCell = pCell->nextCell;	// Relink cells
				if(pCell == beginCell)					// Check if the first cell is deleted
					beginCell = beginCell->nextCell;	// First cell pointer points at next cell
				free(pCell);								// Free the deleted cell's memory
			}
		}
	}			// End loop forever
}				// End main

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -