RandyGaul / cute_headers

Collection of cross-platform one-file C/C++ libraries with no dependencies, primarily used for games
4.33k stars 269 forks source link

[cute_tiled_h]: Field `name` points to wrong memory address. #368

Open KlemenPl opened 1 year ago

KlemenPl commented 1 year ago

When naming objects in collision editor I can't for some reason access that name. I have 2 objects (first is named ˙test`):

image

To read the 2 objects I use the following code:

#include <cute_tiled.h>
#include <stdio.h>

int main() {
    cute_tiled_tileset_t *tileset = cute_tiled_load_external_tileset("test.tsj", NULL);

    cute_tiled_tile_descriptor_t *tile = tileset->tiles;

    printf("Tileset name: %p %s\n", tileset->name.ptr, tileset->name.ptr);
    while (tile) {
        cute_tiled_layer_t *layer = tile->objectgroup;
        cute_tiled_object_t *object = layer->objects;

        while (object) {
            printf("[%p]: ellipse:%d x:%2.f y:%2.f w:%2.f h:%2.f\n",
                   object->name.ptr, object->ellipse,
                   object->x, object->y, object->width, object->height);

            object = object->next;
        }

        tile = tile->next;
    }

    cute_tiled_free_external_tileset(tileset);
}

I get the correct position and size of rectangles, but the name points to invalid memory address. Derefrencing it, causes segfault.

Tileset name: 0x7f12107bf038 test
[0x100000005]: ellipse:0 x: 6 y: 6 w: 4 h: 4
[0x100000002]: ellipse:0 x: 2 y: 2 w:12 h:12

In exported json file I can see that it has correct name test.

Exported json: test.json Tiled tileset: tileset.zip

I am wondering what exactly am I doing wrong and how do I access to the name field.

KlemenPl commented 1 year ago

This is also an issue with custom properties.

Exported tileset with custom property: test.json

image

RobLoach commented 1 year ago

.ptr is the correct way to get the string. It could be that name isn't loaded for each object.

printf("%s/n", object->name.ptr);