【发布时间】:2015-06-21 13:58:51
【问题描述】:
我遇到了以下问题。 我想调整结构 (car) 上的指针数组的大小。我得到了以下代码。
Class Car{
...
char * Owner_Name;
char * carID
};
Class Register {
...
int CarCNT;
int car_num_default;
Car ** dataBase;
Register ()
{ //constructor
car_num_default = 5 ; //for example;
dataBase = new Car * [car_num_default];
}
};
现在当我添加第 6 个时。 car 我需要调整指向汽车的指针数组的大小。我应该如何在不产生任何内存泄漏的情况下做到这一点?还是内存错误? :) 我尝试了以下代码,但它会导致一些内存泄漏..
void Register:: Add ( const char * carID, const char * owner)
{
if (carCNT == car_num_default) // now it's full array need resize
{
car ** tmp = new car * [carCNT]; //create new array ;
for(int i = 0 ; i < carCNT;i++)
tmp[i] = new car(databaze[i]->car_ID,databaze[i]->owner_name);
free(database); //free memory and than alloc new bigger
database = new car * [car_num_default * 5];
for(int i = 0; i < carCNT; i++)
data_by_RZ[i] = tmp [i];
free(tmp);
car_num_def = car_num_def * 5;
}
databaze[carCNT] = new car(....);
carCNT++;
}
感谢您的帮助!
【问题讨论】:
-
这闻起来不像
c。 -
坦率地说,这也不完全像 c++。没有关键字
Class。 -
如果没有 STL,您总是可以在堆上分配并执行 realloc()。但是如果数组中保存的对象是类对象,你希望 new 和 delete 运行构造函数/析构函数。
-
@dragon_Lord_Of_Math 如果您不能使用 STL,请创建自己的。编写你自己的向量类(它不必拥有
std::vector的所有花里胡哨),一旦你编写了它,你就可以在“不能使用 STL”的任何地方使用它。您现在所做的 IMO 没有用,因为您所做的只是业务逻辑中间的这些一次性分配和释放例程。
标签: c++ pointers resize realloc