高速增长的一个数组,C ++ [英] Dynamically Growing an Array in C++

查看:126
本文介绍了高速增长的一个数组,C ++的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有CN​​AME对象的指针数组。我有以下的构造函数用于初始化我的数组大小之一。然后,当我添加对象由我成长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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆