microsoft / microsoft/snmalloc
Windows: how to override malloc / free / new / delete globally ?
Nobody has claimed this yet.
- Dominant language
- C++
- Stars
- 2k
- Forks
- 138
- Avg merge
- 11h 19m
- Merged PRs (30d)
- 5
Description
The simple following program crashes if linking against snmallocshim-static (MSYS2, with clang64 but reproducible on any other MinGW environment):
main.cpp:
#include <QObject>
int main(int argc, char *argv[]) {
delete new QObject;
return 0;
}
$ clang++ main.cpp \
-I/clang64/include/qt6/ \
-I/clang64/include/qt6/QtCore \
-std=c++20 \
/clang64/lib/libQt6Core.dll.a \
libsnmallocshim-static.a \
-lbcrypt -rdynamic
$ lldb ./a.exe
(lldb) r
Process 19300 stopped
* thread #1, stop reason = Exception 0x80000003 encountered at address 0x7ffbd2e9ca82
frame #0: 0x00007ffbd2e9ca83 ntdll.dll`RtlIsZeroMemory + 163
ntdll.dll`RtlIsZeroMemory:
-> 0x7ffbd2e9ca83 <+163>: jmp 0x7ffbd2e9ca91 ; <+177>
0x7ffbd2e9ca85 <+165>: movq 0xf8(%rsp), %rdi
0x7ffbd2e9ca8d <+173>: movl 0x20(%rsp), %ebx
0x7ffbd2e9ca91 <+177>: movl %ebx, 0x30(%rsp)
(lldb) bt
* thread #1, stop reason = Exception 0x80000003 encountered at address 0x7ffbd2e9ca82
* frame #0: 0x00007ffbd2e9ca83 ntdll.dll`RtlIsZeroMemory + 163
frame #1: 0x00007ffbd2ea5b5a ntdll.dll`__misaligned_access + 1066
frame #2: 0x00007ffbd2ea5e3a ntdll.dll`__misaligned_access + 1802
frame #3: 0x00007ffbd2eb1e35 ntdll.dll`__misaligned_access + 50949
frame #4: 0x00007ffbd2dcc3bc ntdll.dll`RtlGetCurrentServiceSessionId + 4892
frame #5: 0x00007ffbd2dcb001 ntdll.dll`RtlFreeHeap + 81
frame #6: 0x00007ffbd016364b ucrtbase.dll`_free_base + 27
frame #7: 0x00007ff65dd213f0 a.exe`main + 96
frame #8: 0x00007ff65dd21303 a.exe`__tmainCRTStartup at crtexe.c:259:15
frame #9: 0x00007ff65dd21366 a.exe`mainCRTStartup at crtexe.c:180:9
frame #10: 0x00007ffbd134259d kernel32.dll`BaseThreadInitThunk + 29
frame #11: 0x00007ffbd2deaf38 ntdll.dll`RtlUserThreadStart + 40
thus I assume I am linking something incorrectly and some allocations made with ucrt are free with snmalloc or conversely which then makes ucrt scream.
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with the minimal main.cpp reproducer and the shown clang++ command in the MSYS2 clang64 environment. Investigate how libsnmallocshim-static.a interacts with Qt6 and the UCRT allocation paths, then verify the correct global override or linking arrangement by rerunning the program without the allocator mismatch crash.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- cpp
- Domain
- operating-systems
- Issue type
- Bug
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 25/100