无法将多个 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.
我有这个函数可以将事件(每个事件都是一个 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.