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
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <assert.h>

int main(int argc, char* argv[]) {
    int* numbers = malloc(sizeof(*numbers) * 5);
    for (int i = 0; i < 5; i++) {
        numbers[i] = i*i;
    }
    for (int i = 0; i < 5; i++) {
        printf("numbers[%d] == %d\n", i, numbers[i]);
    }
    int* numbers_end = numbers + 5;
    for (; numbers < numbers_end; numbers++) {  
        printf("*numbers == %d\n", *numbers);
    }
    // numbers_pos is part of a malloced addres
    // (in this case, offset by 5 integers)
    // it is not the start of that array
    // its not the address returned by malloc
    free(numbers);
    // free is only valid from an address returned by malloc
    // free is not valid on an offset from that address

    return EXIT_SUCCESS;
}
/* vim: set tabstop=4 shiftwidth=4 fileencoding=utf-8 noexpandtab: */

© Copyright 2024 Alexander J. Quinn & David Burnett         This content is protected and may not be shared, uploaded, or distributed.