a-game

2D platformer written from scratch.
Log | Files | Refs | README | LICENSE

commit b9625ced8f57ae97d7076d7176b42c2982c1c311
parent 03af058f690d0f25d3a66397d2b60b0a52643e46
Author: Amin Mesbah <dev@aminmesbah.com>
Date:   Fri, 12 Jul 2019 20:51:28 -0700

Add asserts catching a nasty allocator bug

Diffstat:
Msrc/game.c | 4++--
Msrc/image.c | 1+
Msrc/memory.c | 10+++++++++-
3 files changed, 12 insertions(+), 3 deletions(-)

diff --git a/src/game.c b/src/game.c @@ -90,7 +90,7 @@ internal void game_init(struct GameMemory *game_memory, v2u framebuffer) game_state->player.move_mode = MOVE_MODE_FALLING; game_state->player.facing = DIR_RIGHT; - size_t temp_memory_size = MEBIBYTES(1); + size_t temp_memory_size = MEBIBYTES(2); size_t world_memory_size = game_memory->buffer_size - (sizeof(struct GameState) + temp_memory_size); mem_st_init( &game_state->temp_allocator, @@ -195,7 +195,7 @@ internal void game_init(struct GameMemory *game_memory, v2u framebuffer) // game_load_images { size_t file_len = 0; - u8 *t = platform.platform_read_entire_file("assets/tile0.tga", &file_len); + u8 *t = platform.platform_read_entire_file("assets/tileset0.tga", &file_len); assert(t); i32 img_w = 0; diff --git a/src/image.c b/src/image.c @@ -100,6 +100,7 @@ internal u8 *img_load_from_memory(u8 *buffer, size_t len, i32 *out_width, i32 *o img_bytes_read += run_length_in_bytes; } } + assert(img_bytes_read == img_data_buf_len); } // NOTE(amin): we convert BGRA to RGBA because OpenGL ES and WebGL don't diff --git a/src/memory.c b/src/memory.c @@ -19,14 +19,22 @@ internal void mem_st_init(struct StackAllocator *allocator, void *backing_buffer allocator->used = 0; } -internal void* mem_st_alloc(struct StackAllocator *allocator, size_t bytes, size_t alignment) +internal void *mem_st_alloc(struct StackAllocator *allocator, size_t bytes, size_t alignment) { size_t worst_case_bytes = bytes + alignment - 1; assert(allocator->used + worst_case_bytes <= allocator->size); allocator->used += worst_case_bytes; uintptr_t current_head = (uintptr_t)allocator->base + allocator->used; + void *address = (void *)mem_align_address(current_head, alignment); + { + void *address_after_allocated_buffer = address + bytes; + void *address_after_used_allocator_memory = allocator->base + allocator->used; + void *address_after_backing_buffer = allocator->base + allocator->size; + assert(address_after_allocated_buffer <= address_after_used_allocator_memory); + assert(address_after_allocated_buffer <= address_after_backing_buffer); + } return address; }