我有一个函数,用于向事件数组中添加一个事件(每个事件都是一个cstring):
bool vendor::addEvent(const char * event)
{
if (eventsSize == EVENTS_CAP - 1)
return false;
eventsSize++; //keep track of the size of the array
this->events = new char*[EVENTS_CAP]; //outer array
this->events[eventsSize-1] = new char[strlen(event) + 1]; //cstring array
strcpy(this->events[eventsSize-1], event);
return true;
}EVENTS_CAP等于20,是我的供应商类的一部分,以及eventsSize和事件(您将在下面的图像中看到)。此函数在传递一个事件后运行良好:

但是传入另一个事件会使数组不可读:

你知道是什么导致的吗?
发布于 2015-11-24 21:42:48
每次调用events函数时,都会重新分配addEvent()数组(并泄漏旧数组)。
因为每次都要增加eventsSize,所以每次都要写入下一个数组成员,而前面的数组没有初始化(这解释了为什么第二次传递时数组包含垃圾)。
您可能只需要做以下更改:
if (!this->events) this->events = new char*[EVENTS_CAP]; //outer array发布于 2015-11-24 21:44:40
我没有代表可以评论否则我会的。
尽管如此,如果我们确切地知道您有什么“事件”定义为“事件”,这将是有帮助的。根据我所掌握的信息,我可以想象
this->events = new char*[EVENTS_CAP]; //outer array
this->events[eventsSize-1] = new char[strlen(event) + 1]; //cstring array第一行是内存泄漏。您每次都在重新定义事件指向的位置。
在第二行中,如果(eventsSize - 1) > EVENTS_CAP,您将击打某物。
由于这是标记的C++,所以我建议使用std::C++和std::string,并且只需要一个std::vector。
https://stackoverflow.com/questions/33904224
复制相似问题