Skip to content

Latest commit

 

History

History
121 lines (81 loc) · 4.18 KB

File metadata and controls

121 lines (81 loc) · 4.18 KB

0x0B. C - malloc, free

Resources

Read or watch:

Learning Objectives

General

  • What is the difference between automatic and dynamic allocation
  • What is malloc and free and how to use them
  • Why and when use malloc
  • How to use valgrind to check for memory leak

Tasks

0. Float like a butterfly, sting like a bee

  • Write a function that creates an array of chars, and initializes it with a specific char.

Requirements:

Prototype: char *create_array(unsigned int size, char c); Returns NULL if size = 0 Returns a pointer to the array, or NULL if it fails

Mode: mandatory

File: 0-create_array.c


1. The woman who has no imagination has no wings

  • Write a function that returns a pointer to a newly allocated space in memory, which contains a copy of the string given as a parameter.

Requirements:

Prototype: char *_strdup(char *str); The _strdup() function returns a pointer to a new string which is a duplicate of the string str. Memory for the new string is obtained with malloc, and can be freed with free. Returns NULL if str = NULL On success, the _strdup function returns a pointer to the duplicated string. It returns NULL if insufficient memory was available

Mode: mandatory

File: 1-strdup.c


2. He who is not courageous enough to take risks will accomplish nothing in life

  • Write a function that concatenates two strings.

Requirements:

Prototype: char *str_concat(char *s1, char *s2); The returned pointer should point to a newly allocated space in memory which contains the contents of s1, followed by the contents of s2, and null terminated if NULL is passed, treat it as an empty string The function should return NULL on failure

Mode: mandatory

File: 2-str_concat.c


3. If you even dream of beating me you'd better wake up and apologize

  • Write a function that returns a pointer to a 2 dimensional array of integers.

Requirements:

Prototype: int **alloc_grid(int width, int height); Each element of the grid should be initialized to 0 The function should return NULL on failure If width or height is 0 or negative, return NULL

Mode: mandatory

File: 3-alloc_grid.c


4. It's not bragging if you can back it up

  • Write a function that frees a 2 dimensional grid previously created by your alloc_grid function.

Requirements:

Prototype: void free_grid(int **grid, int height); Note that we will compile with your alloc_grid.c file. Make sure it compiles.

Mode: mandatory

File: 4-free_grid.c


5. It isn't the mountains ahead to climb that wear you out; it's the pebble in your shoe

  • Write a function that concatenates all the arguments of your program.

Requirements:

Prototype: char *argstostr(int ac, char **av); Returns NULL if ac == 0 or av == NULL Returns a pointer to a new string, or NULL if it fails Each argument should be followed by a \n in the new string

Mode: #advanced

File: 100-argstostr.c


6. I will show you how great I am

  • Write a function that splits a string into words.

Requirements:

Prototype: char **strtow(char *str); The function returns a pointer to an array of strings (words) Each element of this array should contain a single word, null-terminated The last element of the returned array should be NULL Words are separated by spaces Returns NULL if str == NULL or str == "" If your function fails, it should return NULL

Mode: #advanced

File: 101-strtow.c