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?










share|improve this question
























  • 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















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?










share|improve this question
























  • 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













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?










share|improve this question















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






share|improve this question















share|improve this question













share|improve this question




share|improve this question








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 of malloc 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










  • 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
















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

















active

oldest

votes











Your Answer






StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");

StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});

function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});


}
});














draft saved

draft discarded


















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






























active

oldest

votes













active

oldest

votes









active

oldest

votes






active

oldest

votes
















draft saved

draft discarded




















































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.




draft saved


draft discarded














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





















































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







Popular posts from this blog

Create new schema in PostgreSQL using DBeaver

Deepest pit of an array with Javascript: test on Codility

Costa Masnaga