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.