Advertisement
Guest User

stack and heap demo

a guest
Sep 26th, 2016
125
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. // initialize array so each index contains its value,
  5. // e.g. [0, 1, 2, 3, ...]
  6. void initialize(unsigned int* arr, unsigned int size) {
  7.   for (unsigned int i = 0; i < size; i++) {
  8.     *(arr + i) = i; // arr[i] = i;
  9.   }
  10. }
  11.  
  12. void display(unsigned int* arr, unsigned int size) {
  13.   printf("[ ");
  14.   for (unsigned int i = 0; i < size; i++) {
  15.     printf("%d ", *(arr + i)); // printf("%d ", arr[i]);
  16.   }
  17.   printf("]\n");
  18. }
  19.  
  20. unsigned int* init_array_on_stack() {
  21.   unsigned int arr[10];
  22.   initialize(arr, 10); //memory is still on the stack, address still valid.
  23.   return arr; // bad! do not return address of stack memory!
  24. }
  25.  
  26. unsigned int* init_array_on_heap() {
  27.   unsigned int* arr = (unsigned int*)malloc(10 * sizeof(unsigned int));
  28.   initialize(arr, 10);
  29.   return arr;
  30. }
  31.  
  32. int main() {
  33.   unsigned int* arr1 = init_array_on_stack();
  34.   unsigned int* arr2 = init_array_on_heap();
  35.   display(arr1, 10); // segmentation fault! stack address invalid.
  36.   display(arr2, 10); // memory was allocated on heap, address still valid.
  37.   free(arr2); // need to free arr2 because it was allocated on heap.
  38.   display(arr2, 10); // segmentation fault! heap address invalid (already freed).
  39. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement