nothings / stb

stb single-file public domain libraries for C/C++
https://twitter.com/nothings
Other
25.77k stars 7.66k forks source link

STBDS_FREE is used outside of STB_DS_IMPLEMENTATION causing custom implementation to be replaced by free(). #1632

Open guifes opened 2 months ago

guifes commented 2 months ago

Describe the bug I've tried replacing STBDS_REALLOC and STBDS_FREE as instructed in the comments but I think I found a tiny bug. Since STBDS_FREE is used in stb_ds.h outside of the implementation code, it gets replaced by free instead of my custom replacement for the other source files that don't have STB_DS_IMPLEMENTATION defined.

To Reproduce Steps to reproduce the behavior:

  1. Add stb_ds.h to a project overriding STBDS_FREE and STB_DS_IMPLEMENTATION in a source file
  2. On another source file, #include "stb_ds.h" and try to use arrfree in a context where it makes sense.
  3. Check the intermediary .i file and see that arrfree is gonna be replaced with an expression that contains free instead of your custom implementation.

Expected behavior Since the point of redefining STBDS_REALLOC and STBDS_FREE is to have your custom allocation code be run always, there should be no exceptions such as this one.

nothings commented 2 months ago

Yes, looking at the code this does seem to be a bug.