无法将多个 Cstring 添加到一组 Cstring

Unable to Add More than One Cstring to an array of Cstrings

我有这个函数可以将事件(每个事件都是一个 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 并且是我的供应商 class 的一部分,还有 eventsSize 和事件(您将在下图中看到)。此函数在传入一个事件后工作正常:

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

您知道是什么原因造成的吗?

每次调用 addEvent() 函数时,您都在重新分配 events 数组(并泄漏旧数组)。

因为你递增 eventsSize 你每次写入下一个数组成员,而前面的成员未初始化(这解释了为什么它看起来像数组在第​​二次传递时包含垃圾)。

您可能只需要进行以下更改:

if (!this->events) this->events = new char*[EVENTS_CAP]; //outer array

我没有代表发表评论,否则我会的。

也就是说,如果我们确切知道您将 "events" 定义为什么,将会很有帮助。根据我们掌握的信息,我想

this->events = new char*[EVENTS_CAP]; //outer array
this->events[eventsSize-1] = new char[strlen(event) + 1]; //cstring array

第一行是内存泄漏。您每次都在重新定义事件指向的位置。

在第二行 if (eventsSize - 1) > EVENTS_CAP 你将破坏某些东西。

因为这是 C++ 标签,我建议使用 std::vector 和 std::string 并简单地使用 std::vector.