gpt4 book ai didi

c++ - C++中的指针和内存分配

转载 作者:太空宇宙 更新时间:2023-11-04 12:09:01 24 4
gpt4 key购买 nike

我最近开始使用 C++,我不确定我是否掌握了指针的概念及其与数组的联系。我有两个类,Term 和 Polynom。我有一个主循环,允许用户输入 2 个数字。然后将这些数字添加到“Term”对象,然后将该对象添加到“Polynom”对象。每次执行循环时,都会创建一个新的“Term”对象。

 //These lines are executed until the user is done entering numbers             
potens = new Term;
potens->sattPotens(kinput, ninput);//Add values to "Term object"
poly.addTerm(potens);//Add "Term" object to "Polynom" object

“Polynom”对象在程序中只创建一次。在“Polynom”类中,我使用“Term”指针来存储添加到“Polynom”对象的所有“Term”对象。 “Polynom”类中的“Term”指针在“Polynom”构造函数中初始化一次。

 void Polynom::addTerm(Term *t){
*(term+antal_termer) = *t;//This is were the program crashes
antal_termer++;
}

我知道我可以使用 vector 而不是指针来存储“Term”对象,但我正在尝试了解指针的工作原理。我也不确定什么时候应该删除在主循环中创建的对象。由于每次执行循环时,我都会创建一个新的“Term”对象,但我从不删除它们。

编辑:我曾经这样分配“Polynom”类中的“Term”对象:term = new Term[];然后我将其更改为 term = new Term[10];但是当我执行 term[antal_termer] = *t; 时我仍然崩溃

最佳答案

 *(term+antal_termer) = *t;//This is were the program crashes
antal_termer++;

这会崩溃,因为您可能没有分配足够的内存。您最好的选择是使用 std::vector 而不是动态数组。

分配的任期是term = new Term;还是term = new Term[sz];

如果是第一个,则只能存储一个对象,term+antal_termer 不止于此。如果是第二个,如果 antal_termer >= sz,你就会遇到问题。

std::vector 选项为您提供自动管理:

 std::vector<Term> terms;
Term potens; //why use new?
terms.push_back(potens);

请注意,我使用的是对象,而不是指针。对于指针,它是

 std::vector<Term*> terms;
Term* potens = new Term;
terms.push_back(potens);

但请注意,当你用完它时,你必须删除内存。

关于c++ - C++中的指针和内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10650519/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com