高速增长的一个数组,C ++ [英] Dynamically Growing an Array in C++
本文介绍了高速增长的一个数组,C ++的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有CNAME对象的指针数组。我有以下的构造函数用于初始化我的数组大小之一。然后,当我添加对象由我成长1阵列,并添加新的对象。它编译罚款,但是当我尝试打印他们,我只是得到分段错误。你可以看看,看看,如果我做错什么?
//构造
Names_Book :: Names_Book()
{
grow_factor = 1;
大小= 0;
CNAMES =(CNAME **)的malloc(grow_factor * sizeof的(CNAME *));
CNAMES [0] = NULL;
}无效Names_Book :: addCName(CNAME * CN)
{
INT oldSize =大小;
INT newSize =大小+ 1; CNAME ** newCNames =(CNAME **)的malloc(newSize * sizeof的(CNAME *)); 的for(int i = 0; I< newSize;我++)
{
newCNames [I] = CNAMES [I]
} 的for(int i = oldSize; I< newSize;我++)
{
newCNames [I] = NULL;
}
/ *当前阵列复制到旧数组* /
CNAMES = newCNames; 删除(newCNames); 大小++;}
解决方案
要在C ++动态可增长的数组,你的应的使用的 的std ::矢量
或至少看看它的实现。
I have an array of pointers of CName objects. I have the following constructor which initializes my array to size one. Then when I add an object I grow the array by 1 and add the new object. It compiles fine, however when I try to print them I just get segmentation fault error. Can you look and see if I'm doing anything wrong?
//constructor
Names_Book::Names_Book()
{
grow_factor = 1;
size = 0;
cNames = (CName**)malloc(grow_factor * sizeof(CName*));
cNames[0] = NULL;
}
void Names_Book::addCName(CName* cn)
{
int oldSize = size;
int newSize = size + 1;
CName** newCNames = (CName**)malloc(newSize * sizeof(CName*));
for(int i=0; i<newSize; i++)
{
newCNames[i] = cNames[i];
}
for(int i=oldSize; i<newSize; i++)
{
newCNames[i] = NULL;
}
/* copy current array to old array */
cNames = newCNames;
delete(newCNames);
size++;
}
解决方案
To have dynamically growable array in C++, you should use std::vector
or at least look at its implementation.
这篇关于高速增长的一个数组,C ++的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文