如何 delete/free 一个字符串文字?
How to delete/free a string literal?
我有一个 std::vector<const char*>
,我用 .push_back("something")
填充了它。如何删除不包括std::string
的header的内容? delete
段错误,并且 std::free
需要 void*
并且它“无法使用 'const char *' 类型的左值初始化 [..]”。
字符串文字具有静态存储持续时间。您不能使用 operator delete 删除它们。字符串文字将一直存在到程序结束,
您可以删除使用 operator new 创建的内容。
您可以只擦除矢量的所有或选定元素或完全清除它。
您可以 delete
只有您 new
。您没有使用 new
来创建字符串文字,因此对它们使用 delete
将导致未定义的行为。不要那样做。同样,您可以 free
只有您 malloc
的内容(加上一些内部 malloc
的相关函数)。
字符串文字具有静态存储持续时间。这意味着它们的存储空间会在程序结束时自动释放,无需您的干预。
您可以使用 erase
成员函数从向量中删除指针。
像 "something"
这样的字符串文字存储在可执行文件的 read-only 段中。你不能 delete
他们。而且,修改它们是未定义的行为。
我有一个 std::vector<const char*>
,我用 .push_back("something")
填充了它。如何删除不包括std::string
的header的内容? delete
段错误,并且 std::free
需要 void*
并且它“无法使用 'const char *' 类型的左值初始化 [..]”。
字符串文字具有静态存储持续时间。您不能使用 operator delete 删除它们。字符串文字将一直存在到程序结束,
您可以删除使用 operator new 创建的内容。
您可以只擦除矢量的所有或选定元素或完全清除它。
您可以 delete
只有您 new
。您没有使用 new
来创建字符串文字,因此对它们使用 delete
将导致未定义的行为。不要那样做。同样,您可以 free
只有您 malloc
的内容(加上一些内部 malloc
的相关函数)。
字符串文字具有静态存储持续时间。这意味着它们的存储空间会在程序结束时自动释放,无需您的干预。
您可以使用 erase
成员函数从向量中删除指针。
像 "something"
这样的字符串文字存储在可执行文件的 read-only 段中。你不能 delete
他们。而且,修改它们是未定义的行为。