-
Notifications
You must be signed in to change notification settings - Fork 41
Open
Description
import std.file;
import std.stdio;
import msgpack;
struct S { byte[] a; byte[] b; byte[] c; }
void main()
{
S s1;
s1.a = [1,2,3,4,5];
s1.b = s1.a;
s1.c = s1.a[1..3];
// serialize data
ubyte[] inData = pack(s1);
// write data to a file
std.file.write("file.dat", inData);
// read data from a file
ubyte[] outData = cast(ubyte[])read("file.dat");
// unserialize the data
S s2 = outData.unpack!S();
writeln(s1); // S([1, 2, 3, 4, 5], [1, 2, 3, 4, 5], [2, 3]) // true
writeln(s2); // S([1, 2, 3, 4, 5], [1, 2, 3, 4, 5], [2, 3]) // true
s1.c[1] = 100;
s2.c[1] = 100;
writeln(s1); // S([1, 2, 100, 4, 5], [1, 2, 100, 4, 5], [2, 100]) // true
writeln(s2); // S([1, 2, 3, 4, 5], [1, 2, 3, 4, 5], [2, 100]) // false
assert(s1.a.ptr == s1.b.ptr); // true
assert(s2.a.ptr == s2.b.ptr); // false
}
I did not notice such problems before, but recently I returned to my project and noticed that it stopped working.
Found out that this is because of pointers, as in the code example above.
Metadata
Metadata
Assignees
Labels
No labels