Simple code (below, the malloc() / free() sequence runs in 100 threads) crashes on any Windows OS that I tried to run.
Any help would be greatly appreciated.
Maybe some kind of compiler directive will help?
We are building the executable in VS2017 in Release / x64; The executable crashes on any Windows platform that I tried after a few minutes of work.
I also tried to build with VS2015, but this does not help.
The same code on Linux works fine.
In fact, the problem is more serious than it seems; We are faced with a situation where our server code crashes several times a day in a production environment for no reason (when the number of user calls exceeds a certain value). We tried to nail the problem and created a simple solution that reproduces the problem.
The archive with the VS project is here .
VS says the command line is:
/Yu"stdafx.h "/ GS / GL / W3 / Gy / Zc: wchar_t / Zi / Gm- / O2 / sdl
/Fd"x64\Release\vc140.pdb "/ Zc: inline / fp: precise / D" NDEBUG "
/ D "_CONSOLE" / D "_UNICODE" / D "UNICODE" / errorReport: prompt / WX- / Zc: forScope / Gd
/ Oi / MD / Fa "x64 \ Release \" / EHsc / nologo / Fo "x64 \ Release \" /Fp"x64\Release\MallocTest.pch "
Code:
#include "stdafx.h" #include <iostream> #include <thread> #include <conio.h> using namespace std; #define MAX_THREADS 100 void task(void) { while (true) { char *buffer; buffer = (char *)malloc(4096); if (buffer == NULL) { cout << "malloc error" << endl; } free(buffer); } } int main(int argc, char** argv) { thread some_threads[MAX_THREADS]; for (int i = 0; i < MAX_THREADS; i++) { some_threads[i] = thread(task); } for (int i = 0; i < MAX_THREADS; i++) { some_threads[i].join(); } _getch(); return 0; }
source share