1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <assert.h>

// ILLUSTRATION OF USING FREEING MEMORY THAT IS NOT ON THE STACK

int main(int argc, char* argv[]) {
    
    int n = 5;
    int* a_n = &n;  // Remember:  &n means "address of n"
    free(a_n);  // BAD!!! a_n is the address of stack memory not heap memory.

    return EXIT_SUCCESS;
}
/*
*** Error in `/home/dynamo/a/aq/q.c.temp': free(): invalid pointer: 0x00007ffec9d2e474 ***
======= Backtrace: =========

    // BAD!!!!!!   Allocation block at (address) a_n was already deallocated (="freed").
    printf("*a_n == %d\n", *a_n);  // NOT DEPENDABLE

/lib64/libc.so.6(+0x81329)[0x7fdc3904c329]
/home/dynamo/a/aq/q.c.temp[0x40056f]
/lib64/libc.so.6(__libc_start_main+0xf5)[0x7fdc38fed555]
/home/dynamo/a/aq/q.c.temp[0x400449]
======= Memory map: ========
00400000-00401000 r-xp 00000000 00:c7 10119989                           /home/dynamo/a/aq/q.c.temp
00600000-00601000 r--p 00000000 00:c7 10119989                           /home/dynamo/a/aq/q.c.temp
00601000-00602000 rw-p 00001000 00:c7 10119989                           /home/dynamo/a/aq/q.c.temp
7fdc34000000-7fdc34021000 rw-p 00000000 00:00 0
7fdc34021000-7fdc38000000 ---p 00000000 00:00 0
7fdc38db4000-7fdc38dcb000 r-xp 00000000 00:3c 2362745505                 /package/gcc/8.3.0/lib64/libgcc_s.so.1
7fdc38dcb000-7fdc38fca000 ---p 00017000 00:3c 2362745505                 /package/gcc/8.3.0/lib64/libgcc_s.so.1
7fdc38fca000-7fdc38fcb000 rw-p 00016000 00:3c 2362745505                 /package/gcc/8.3.0/lib64/libgcc_s.so.1
7fdc38fcb000-7fdc3918f000 r-xp 00000000 fd:00 50355025                   /usr/lib64/libc-2.17.so
7fdc3918f000-7fdc3938e000 ---p 001c4000 fd:00 50355025                   /usr/lib64/libc-2.17.so
7fdc3938e000-7fdc39392000 r--p 001c3000 fd:00 50355025                   /usr/lib64/libc-2.17.so
7fdc39392000-7fdc39394000 rw-p 001c7000 fd:00 50355025                   /usr/lib64/libc-2.17.so
7fdc39394000-7fdc39399000 rw-p 00000000 00:00 0
7fdc39399000-7fdc393bb000 r-xp 00000000 fd:00 50355011                   /usr/lib64/ld-2.17.so
7fdc39578000-7fdc3957b000 rw-p 00000000 00:00 0
7fdc395b8000-7fdc395ba000 rw-p 00000000 00:00 0
7fdc395ba000-7fdc395bb000 r--p 00021000 fd:00 50355011                   /usr/lib64/ld-2.17.so
7fdc395bb000-7fdc395bc000 rw-p 00022000 fd:00 50355011                   /usr/lib64/ld-2.17.so
7fdc395bc000-7fdc395bd000 rw-p 00000000 00:00 0
7ffec9d0e000-7ffec9d30000 rw-p 00000000 00:00 0                          [stack]
7ffec9d5b000-7ffec9d5d000 r-xp 00000000 00:00 0                          [vdso]
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0                  [vsyscall]
/bin/bash: line 1: 35627 Aborted                 (core dumped) ~/q.c.temp

*/
/* vim: set tabstop=4 shiftwidth=4 fileencoding=utf-8 noexpandtab: */

© Copyright 2022 Alexander J. Quinn         This content is protected and may not be shared, uploaded, or distributed.