Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- // initialize array so each index contains its value,
- // e.g. [0, 1, 2, 3, ...]
- void initialize(unsigned int* arr, unsigned int size) {
- for (unsigned int i = 0; i < size; i++) {
- *(arr + i) = i; // arr[i] = i;
- }
- }
- void display(unsigned int* arr, unsigned int size) {
- printf("[ ");
- for (unsigned int i = 0; i < size; i++) {
- printf("%d ", *(arr + i)); // printf("%d ", arr[i]);
- }
- printf("]\n");
- }
- unsigned int* init_array_on_stack() {
- unsigned int arr[10];
- initialize(arr, 10); //memory is still on the stack, address still valid.
- return arr; // bad! do not return address of stack memory!
- }
- unsigned int* init_array_on_heap() {
- unsigned int* arr = (unsigned int*)malloc(10 * sizeof(unsigned int));
- initialize(arr, 10);
- return arr;
- }
- int main() {
- unsigned int* arr1 = init_array_on_stack();
- unsigned int* arr2 = init_array_on_heap();
- display(arr1, 10); // segmentation fault! stack address invalid.
- display(arr2, 10); // memory was allocated on heap, address still valid.
- free(arr2); // need to free arr2 because it was allocated on heap.
- display(arr2, 10); // segmentation fault! heap address invalid (already freed).
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement