How to serialize/deserialize a matrix expressed like a pointer to pointer with BOOST C++
up vote
0
down vote
favorite
I am working with boost and an a two dimensional array of floats expressed like a double pointer (float**). By the moment I am allocating memory two load the value (when deserializing), I don't know and I did not find any information on how to do it.
int i;
array = (float**) malloc(N * sizeof(float*));
assert(array == NULL);
for (i=0; i<N; i++) {
array[i] = (float*) malloc(N * sizeof(float));
assert(array[i] == NULL);
}
I tried a few things like serializing one by one the arrays inside but is not working.
Also you know some documentation about this? I found a few examples of serialization but they are very simple.
Thank you.
EDIT
I changed the mallocs by constructors of float type. The case is that now is not possible even to compile.
if (Archive::is_loading::value)
{
assert(array == NULL);
array = new float*[N];
int i;
for (i=0; i<N; i++) {
assert(array[i] == NULL);
array[i] = new float[M];
}
}
ar & array;
This is giving me the following error:
error: request for member ‘serialize’ in ‘t’, which is of non-class type ‘float*’
t.serialize(ar, file_version);
It's not possible to serialize float* or I am missing something?
c++ pointers boost boost-serialization
|
show 1 more comment
up vote
0
down vote
favorite
I am working with boost and an a two dimensional array of floats expressed like a double pointer (float**). By the moment I am allocating memory two load the value (when deserializing), I don't know and I did not find any information on how to do it.
int i;
array = (float**) malloc(N * sizeof(float*));
assert(array == NULL);
for (i=0; i<N; i++) {
array[i] = (float*) malloc(N * sizeof(float));
assert(array[i] == NULL);
}
I tried a few things like serializing one by one the arrays inside but is not working.
Also you know some documentation about this? I found a few examples of serialization but they are very simple.
Thank you.
EDIT
I changed the mallocs by constructors of float type. The case is that now is not possible even to compile.
if (Archive::is_loading::value)
{
assert(array == NULL);
array = new float*[N];
int i;
for (i=0; i<N; i++) {
assert(array[i] == NULL);
array[i] = new float[M];
}
}
ar & array;
This is giving me the following error:
error: request for member ‘serialize’ in ‘t’, which is of non-class type ‘float*’
t.serialize(ar, file_version);
It's not possible to serialize float* or I am missing something?
c++ pointers boost boost-serialization
Yet another reason why you should use proper C++ containers rather than raw C-style data structures.
– Paul R
Nov 19 at 9:25
Well, the case is that this application has been brought to me and I have to do this part of the serialization. I can spend my time changing to the C++ containers (which would be nice), but also I would like to know how to do it with these raw C data structures :)
– Marc43
Nov 19 at 9:26
"I tried a few things" - please include that code in the question, and what exactly didn't work.
– rustyx
Nov 19 at 9:37
You shouldn't be using a pointer of a pointer to represent your matrix. That's plain wrong. Not only you'll face problems like the one you're asking about, but also your matrix performance will be awful because you'll likely have tons of cache misses when doing any calculations. Make your matrix a one dimensional array in a proper class, and create accessors for the elements that calculate the position in the array. Or better, use a valid library to do that for you.
– The Quantum Physicist
Nov 19 at 9:38
You don't have a C++ program there. Casting the result ofmalloc
doesn't construct any objects, so you have undefined behaviour
– Caleth
Nov 19 at 10:20
|
show 1 more comment
up vote
0
down vote
favorite
up vote
0
down vote
favorite
I am working with boost and an a two dimensional array of floats expressed like a double pointer (float**). By the moment I am allocating memory two load the value (when deserializing), I don't know and I did not find any information on how to do it.
int i;
array = (float**) malloc(N * sizeof(float*));
assert(array == NULL);
for (i=0; i<N; i++) {
array[i] = (float*) malloc(N * sizeof(float));
assert(array[i] == NULL);
}
I tried a few things like serializing one by one the arrays inside but is not working.
Also you know some documentation about this? I found a few examples of serialization but they are very simple.
Thank you.
EDIT
I changed the mallocs by constructors of float type. The case is that now is not possible even to compile.
if (Archive::is_loading::value)
{
assert(array == NULL);
array = new float*[N];
int i;
for (i=0; i<N; i++) {
assert(array[i] == NULL);
array[i] = new float[M];
}
}
ar & array;
This is giving me the following error:
error: request for member ‘serialize’ in ‘t’, which is of non-class type ‘float*’
t.serialize(ar, file_version);
It's not possible to serialize float* or I am missing something?
c++ pointers boost boost-serialization
I am working with boost and an a two dimensional array of floats expressed like a double pointer (float**). By the moment I am allocating memory two load the value (when deserializing), I don't know and I did not find any information on how to do it.
int i;
array = (float**) malloc(N * sizeof(float*));
assert(array == NULL);
for (i=0; i<N; i++) {
array[i] = (float*) malloc(N * sizeof(float));
assert(array[i] == NULL);
}
I tried a few things like serializing one by one the arrays inside but is not working.
Also you know some documentation about this? I found a few examples of serialization but they are very simple.
Thank you.
EDIT
I changed the mallocs by constructors of float type. The case is that now is not possible even to compile.
if (Archive::is_loading::value)
{
assert(array == NULL);
array = new float*[N];
int i;
for (i=0; i<N; i++) {
assert(array[i] == NULL);
array[i] = new float[M];
}
}
ar & array;
This is giving me the following error:
error: request for member ‘serialize’ in ‘t’, which is of non-class type ‘float*’
t.serialize(ar, file_version);
It's not possible to serialize float* or I am missing something?
c++ pointers boost boost-serialization
c++ pointers boost boost-serialization
edited Nov 20 at 10:58
asked Nov 19 at 9:23
Marc43
992310
992310
Yet another reason why you should use proper C++ containers rather than raw C-style data structures.
– Paul R
Nov 19 at 9:25
Well, the case is that this application has been brought to me and I have to do this part of the serialization. I can spend my time changing to the C++ containers (which would be nice), but also I would like to know how to do it with these raw C data structures :)
– Marc43
Nov 19 at 9:26
"I tried a few things" - please include that code in the question, and what exactly didn't work.
– rustyx
Nov 19 at 9:37
You shouldn't be using a pointer of a pointer to represent your matrix. That's plain wrong. Not only you'll face problems like the one you're asking about, but also your matrix performance will be awful because you'll likely have tons of cache misses when doing any calculations. Make your matrix a one dimensional array in a proper class, and create accessors for the elements that calculate the position in the array. Or better, use a valid library to do that for you.
– The Quantum Physicist
Nov 19 at 9:38
You don't have a C++ program there. Casting the result ofmalloc
doesn't construct any objects, so you have undefined behaviour
– Caleth
Nov 19 at 10:20
|
show 1 more comment
Yet another reason why you should use proper C++ containers rather than raw C-style data structures.
– Paul R
Nov 19 at 9:25
Well, the case is that this application has been brought to me and I have to do this part of the serialization. I can spend my time changing to the C++ containers (which would be nice), but also I would like to know how to do it with these raw C data structures :)
– Marc43
Nov 19 at 9:26
"I tried a few things" - please include that code in the question, and what exactly didn't work.
– rustyx
Nov 19 at 9:37
You shouldn't be using a pointer of a pointer to represent your matrix. That's plain wrong. Not only you'll face problems like the one you're asking about, but also your matrix performance will be awful because you'll likely have tons of cache misses when doing any calculations. Make your matrix a one dimensional array in a proper class, and create accessors for the elements that calculate the position in the array. Or better, use a valid library to do that for you.
– The Quantum Physicist
Nov 19 at 9:38
You don't have a C++ program there. Casting the result ofmalloc
doesn't construct any objects, so you have undefined behaviour
– Caleth
Nov 19 at 10:20
Yet another reason why you should use proper C++ containers rather than raw C-style data structures.
– Paul R
Nov 19 at 9:25
Yet another reason why you should use proper C++ containers rather than raw C-style data structures.
– Paul R
Nov 19 at 9:25
Well, the case is that this application has been brought to me and I have to do this part of the serialization. I can spend my time changing to the C++ containers (which would be nice), but also I would like to know how to do it with these raw C data structures :)
– Marc43
Nov 19 at 9:26
Well, the case is that this application has been brought to me and I have to do this part of the serialization. I can spend my time changing to the C++ containers (which would be nice), but also I would like to know how to do it with these raw C data structures :)
– Marc43
Nov 19 at 9:26
"I tried a few things" - please include that code in the question, and what exactly didn't work.
– rustyx
Nov 19 at 9:37
"I tried a few things" - please include that code in the question, and what exactly didn't work.
– rustyx
Nov 19 at 9:37
You shouldn't be using a pointer of a pointer to represent your matrix. That's plain wrong. Not only you'll face problems like the one you're asking about, but also your matrix performance will be awful because you'll likely have tons of cache misses when doing any calculations. Make your matrix a one dimensional array in a proper class, and create accessors for the elements that calculate the position in the array. Or better, use a valid library to do that for you.
– The Quantum Physicist
Nov 19 at 9:38
You shouldn't be using a pointer of a pointer to represent your matrix. That's plain wrong. Not only you'll face problems like the one you're asking about, but also your matrix performance will be awful because you'll likely have tons of cache misses when doing any calculations. Make your matrix a one dimensional array in a proper class, and create accessors for the elements that calculate the position in the array. Or better, use a valid library to do that for you.
– The Quantum Physicist
Nov 19 at 9:38
You don't have a C++ program there. Casting the result of
malloc
doesn't construct any objects, so you have undefined behaviour– Caleth
Nov 19 at 10:20
You don't have a C++ program there. Casting the result of
malloc
doesn't construct any objects, so you have undefined behaviour– Caleth
Nov 19 at 10:20
|
show 1 more comment
active
oldest
votes
active
oldest
votes
active
oldest
votes
active
oldest
votes
active
oldest
votes
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53371573%2fhow-to-serialize-deserialize-a-matrix-expressed-like-a-pointer-to-pointer-with-b%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Yet another reason why you should use proper C++ containers rather than raw C-style data structures.
– Paul R
Nov 19 at 9:25
Well, the case is that this application has been brought to me and I have to do this part of the serialization. I can spend my time changing to the C++ containers (which would be nice), but also I would like to know how to do it with these raw C data structures :)
– Marc43
Nov 19 at 9:26
"I tried a few things" - please include that code in the question, and what exactly didn't work.
– rustyx
Nov 19 at 9:37
You shouldn't be using a pointer of a pointer to represent your matrix. That's plain wrong. Not only you'll face problems like the one you're asking about, but also your matrix performance will be awful because you'll likely have tons of cache misses when doing any calculations. Make your matrix a one dimensional array in a proper class, and create accessors for the elements that calculate the position in the array. Or better, use a valid library to do that for you.
– The Quantum Physicist
Nov 19 at 9:38
You don't have a C++ program there. Casting the result of
malloc
doesn't construct any objects, so you have undefined behaviour– Caleth
Nov 19 at 10:20