I am pushing 7 items while I only malloc'd for 5 items, but I don't see any segfaults happening. What am I missing? I thought this would cause the pointer to move past the array bounds and
#include "stdlib.h"
#include "stdio.h"
#include "assert.h"
typedef struct {
int *space;
int size;
int *start;
int *end;
} queue_t;
typedef char BOOL;
#define TRUE 1
#define FALSE 0
void queue_print(queue_t *queue) {
for (int *cur = queue->start; cur < queue->end; cur++) {
printf("%i,", *cur);
}
printf("\n");
}
void queue_init(queue_t **queue, int size) {
(*queue) = (queue_t*) malloc(sizeof(queue_t));
(*queue)->space = (int*) malloc(sizeof(int) * size);
(*queue)->size = size;
(*queue)->start = (*queue)->space;
(*queue)->end = (*queue)->space;
}
void queue_push(queue_t *queue, int elem) {
*(queue->end) = elem;
queue->end++;
}
int queue_pop(queue_t *queue) {
int ret = *(queue->start);
queue->start++;
return ret;
}
int main(int argc, char const *argv[])
{
queue_t *queue;
queue_init(&queue, 5);
queue_print(queue);
queue_push(queue, 1);
queue_print(queue);
queue_push(queue, 2);
queue_print(queue);
queue_push(queue, 3);
queue_print(queue);
queue_push(queue, 4);
queue_print(queue);
queue_push(queue, 5);
queue_print(queue);
queue_push(queue, 6);
queue_print(queue);
queue_push(queue, 7);
queue_print(queue);
printf("%i\n", queue->size);
queue->space[123] = 4;
return 0;
}
The output is:
1,
1,2,
1,2,3,
1,2,3,4,
1,2,3,4,5,
1,2,3,4,5,6,
1,2,3,4,5,6,7,