Best way to implement 2D array on heap












0















I have been working on C++ and I was recently told that I was making 2D arrays on the heap wrong. I have always done it this way:



int **array1 = new int*[200];
for (int i = 0; i < 200; ++i)
{
array1[i] = new int[200];
}


I was told that this was the better way:



int(*ptr)[200] = new int[200][200];


However the person explaining it to me was not able to explain it well as to why one is better then the other. I was hoping someone here would tell me why one would be better then the other?










share|improve this question


















  • 1





    Is there a reason you can't use an std::vector or std::array?

    – scohe001
    Nov 26 '18 at 22:39











  • I would in most cases but I just was wondering why one be better then the other if for some reason you were forced.

    – xxcellerator
    Nov 26 '18 at 22:40






  • 1





    The second only makes one allocation, so it'll be faster at runtime. Might even be drastically faster in multi-threaded code with a single thread allocator. Though neither are something you should ever really find yourself writing unless using a legacy system.

    – George
    Nov 26 '18 at 22:43








  • 1





    int(*ptr)[200] = new int[200][200]; only works if you know the second dimension at compile time. Instead I suggest a simple matrix class.

    – user4581301
    Nov 26 '18 at 22:57













  • Here's an article why you should reduce the number of calls to dynamic memory (on windows) randomascii.wordpress.com/2014/12/10/… If you're not planning on freeing all of the elements at the same time, you could go towards fragmentation. If you're planning on freeing all of the elements at the same time, you're probably better off using the "better way* structure to be more clear about your intentions.

    – GandhiGandhi
    Nov 27 '18 at 0:27


















0















I have been working on C++ and I was recently told that I was making 2D arrays on the heap wrong. I have always done it this way:



int **array1 = new int*[200];
for (int i = 0; i < 200; ++i)
{
array1[i] = new int[200];
}


I was told that this was the better way:



int(*ptr)[200] = new int[200][200];


However the person explaining it to me was not able to explain it well as to why one is better then the other. I was hoping someone here would tell me why one would be better then the other?










share|improve this question


















  • 1





    Is there a reason you can't use an std::vector or std::array?

    – scohe001
    Nov 26 '18 at 22:39











  • I would in most cases but I just was wondering why one be better then the other if for some reason you were forced.

    – xxcellerator
    Nov 26 '18 at 22:40






  • 1





    The second only makes one allocation, so it'll be faster at runtime. Might even be drastically faster in multi-threaded code with a single thread allocator. Though neither are something you should ever really find yourself writing unless using a legacy system.

    – George
    Nov 26 '18 at 22:43








  • 1





    int(*ptr)[200] = new int[200][200]; only works if you know the second dimension at compile time. Instead I suggest a simple matrix class.

    – user4581301
    Nov 26 '18 at 22:57













  • Here's an article why you should reduce the number of calls to dynamic memory (on windows) randomascii.wordpress.com/2014/12/10/… If you're not planning on freeing all of the elements at the same time, you could go towards fragmentation. If you're planning on freeing all of the elements at the same time, you're probably better off using the "better way* structure to be more clear about your intentions.

    – GandhiGandhi
    Nov 27 '18 at 0:27
















0












0








0








I have been working on C++ and I was recently told that I was making 2D arrays on the heap wrong. I have always done it this way:



int **array1 = new int*[200];
for (int i = 0; i < 200; ++i)
{
array1[i] = new int[200];
}


I was told that this was the better way:



int(*ptr)[200] = new int[200][200];


However the person explaining it to me was not able to explain it well as to why one is better then the other. I was hoping someone here would tell me why one would be better then the other?










share|improve this question














I have been working on C++ and I was recently told that I was making 2D arrays on the heap wrong. I have always done it this way:



int **array1 = new int*[200];
for (int i = 0; i < 200; ++i)
{
array1[i] = new int[200];
}


I was told that this was the better way:



int(*ptr)[200] = new int[200][200];


However the person explaining it to me was not able to explain it well as to why one is better then the other. I was hoping someone here would tell me why one would be better then the other?







c++






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Nov 26 '18 at 22:37









xxcelleratorxxcellerator

133




133








  • 1





    Is there a reason you can't use an std::vector or std::array?

    – scohe001
    Nov 26 '18 at 22:39











  • I would in most cases but I just was wondering why one be better then the other if for some reason you were forced.

    – xxcellerator
    Nov 26 '18 at 22:40






  • 1





    The second only makes one allocation, so it'll be faster at runtime. Might even be drastically faster in multi-threaded code with a single thread allocator. Though neither are something you should ever really find yourself writing unless using a legacy system.

    – George
    Nov 26 '18 at 22:43








  • 1





    int(*ptr)[200] = new int[200][200]; only works if you know the second dimension at compile time. Instead I suggest a simple matrix class.

    – user4581301
    Nov 26 '18 at 22:57













  • Here's an article why you should reduce the number of calls to dynamic memory (on windows) randomascii.wordpress.com/2014/12/10/… If you're not planning on freeing all of the elements at the same time, you could go towards fragmentation. If you're planning on freeing all of the elements at the same time, you're probably better off using the "better way* structure to be more clear about your intentions.

    – GandhiGandhi
    Nov 27 '18 at 0:27
















  • 1





    Is there a reason you can't use an std::vector or std::array?

    – scohe001
    Nov 26 '18 at 22:39











  • I would in most cases but I just was wondering why one be better then the other if for some reason you were forced.

    – xxcellerator
    Nov 26 '18 at 22:40






  • 1





    The second only makes one allocation, so it'll be faster at runtime. Might even be drastically faster in multi-threaded code with a single thread allocator. Though neither are something you should ever really find yourself writing unless using a legacy system.

    – George
    Nov 26 '18 at 22:43








  • 1





    int(*ptr)[200] = new int[200][200]; only works if you know the second dimension at compile time. Instead I suggest a simple matrix class.

    – user4581301
    Nov 26 '18 at 22:57













  • Here's an article why you should reduce the number of calls to dynamic memory (on windows) randomascii.wordpress.com/2014/12/10/… If you're not planning on freeing all of the elements at the same time, you could go towards fragmentation. If you're planning on freeing all of the elements at the same time, you're probably better off using the "better way* structure to be more clear about your intentions.

    – GandhiGandhi
    Nov 27 '18 at 0:27










1




1





Is there a reason you can't use an std::vector or std::array?

– scohe001
Nov 26 '18 at 22:39





Is there a reason you can't use an std::vector or std::array?

– scohe001
Nov 26 '18 at 22:39













I would in most cases but I just was wondering why one be better then the other if for some reason you were forced.

– xxcellerator
Nov 26 '18 at 22:40





I would in most cases but I just was wondering why one be better then the other if for some reason you were forced.

– xxcellerator
Nov 26 '18 at 22:40




1




1





The second only makes one allocation, so it'll be faster at runtime. Might even be drastically faster in multi-threaded code with a single thread allocator. Though neither are something you should ever really find yourself writing unless using a legacy system.

– George
Nov 26 '18 at 22:43







The second only makes one allocation, so it'll be faster at runtime. Might even be drastically faster in multi-threaded code with a single thread allocator. Though neither are something you should ever really find yourself writing unless using a legacy system.

– George
Nov 26 '18 at 22:43






1




1





int(*ptr)[200] = new int[200][200]; only works if you know the second dimension at compile time. Instead I suggest a simple matrix class.

– user4581301
Nov 26 '18 at 22:57







int(*ptr)[200] = new int[200][200]; only works if you know the second dimension at compile time. Instead I suggest a simple matrix class.

– user4581301
Nov 26 '18 at 22:57















Here's an article why you should reduce the number of calls to dynamic memory (on windows) randomascii.wordpress.com/2014/12/10/… If you're not planning on freeing all of the elements at the same time, you could go towards fragmentation. If you're planning on freeing all of the elements at the same time, you're probably better off using the "better way* structure to be more clear about your intentions.

– GandhiGandhi
Nov 27 '18 at 0:27







Here's an article why you should reduce the number of calls to dynamic memory (on windows) randomascii.wordpress.com/2014/12/10/… If you're not planning on freeing all of the elements at the same time, you could go towards fragmentation. If you're planning on freeing all of the elements at the same time, you're probably better off using the "better way* structure to be more clear about your intentions.

– GandhiGandhi
Nov 27 '18 at 0:27














0






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',
autoActivateHeartbeat: false,
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%2f53490177%2fbest-way-to-implement-2d-array-on-heap%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown

























0






active

oldest

votes








0






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.




draft saved


draft discarded














StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53490177%2fbest-way-to-implement-2d-array-on-heap%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

A CLEAN and SIMPLE way to add appendices to Table of Contents and bookmarks

Calculate evaluation metrics using cross_val_predict sklearn

Insert data from modal to MySQL (multiple modal on website)