string fileContent = "";
...
writeln(ri, ": debug 1");
foreach(i; 0..dim)
{
if( i > 0 ){ fileContent ~= "\t"; }
writeln(ri, ": debug 1.1: ", ri*dim + i, ": ", positions[ ri*dim + i ]);
fileContent ~= to!string(positions[ ri*dim + i ]);
writeln(ri, ": debug 1.2: ", ri*dim + i, ": ", positions[ ri*dim + i ]);
}
On line "fileContent ~= ...", I get a segmentation fault.
"positions" array is defined as auto positions = new float[ 100 ]; So, I am 100% sure, it is not out of range. "ri*dim + 1" is not a big number at all.
...
4: debug 1.1: 9: 0.271075
4: debug 1.2: 9: 0.271075
4: debug 2
4: debug 2.1: 4
4: debug 3
4: debug 4
5: debug 1
5: debug 1.1: 10: 0.884978
5: debug 1.2: 10: 0.884978
5: debug 1.1: 11: 0.813104
Segmentation fault
...
I have compiled the code with "-g" flag and ran it with GNU debugger. It gives following:
Thread 1 "dataspace" received signal SIGSEGV, Segmentation fault.
0x00005555556ca286 in _D2gc4impl12conservativeQw3Gcx10smallAllocMFNbmKmkxC8TypeInfoZPv ()
So, there is a problem about small allocation. I remember I had this problem before in another project.
I have enough free ram. htop shows 3.96 GiB of 8 GiB is used only and swap is not in use.
DMD64 D Compiler v2.094.0
Is this error related to me? Is it a programmer error? Is it a bug? Am I doing something wrong? This is a compiler related operation (string concatenation), and I assume/expect that it would work without a problem.