在 C++ 中创建一个 char 指针向量
Creating a vector of char pointers in C++
我必须制作一个存储字符指针的向量。每个指针应该只指向一个字符,如 'a' 或 'b'。我没有收到任何编译错误,但是当我 运行 我的程序时,它崩溃了。我不能使用 std::string 或其任何功能,它们只能是字符。
std::vector<char*> myVector;
myVector.reserve(10);
myVector.at(0) = new char['a'];
为什么程序会崩溃?我不应该能够在内存中创建新的 char 指针吗?
我们逐行来看:
std::vector<char*> myVector;
是否需要保留一个字符指针向量?
下面的内容告诉我们你只想在其中存储 1 个字符,所以只需使用 std::string
,它会更容易。
myVector.reserve(10);
reserve() 方法仅用于预分配,它们实际上不会改变向量的大小,只会改变它的容量。对于每个向量:0 <= size <= capacity
。
如果您尝试访问 [0;size[
之外的内容,std::vector::at() 将简单地抛出
myVector.at(0) = new char['a'];
正如我们所说,.at(0)
调用将在此处抛出异常。但是右侧会发生一些有趣的事情。由于分配新数组通常使用 new T[N]
完成,其中 T 是元素的类型,N 是数组的大小,这将隐式地将 char 'a' 转换为 int(即 97)和因此分配一个包含 97 个未初始化元素的数组。
你应该使用 push_back
方法 vector
而不是使用 at
当你没有在 vector 中压入任何东西时。此外,您应该使用 new char('a')
而不是使用具有其他含义的括号。看看这个工作正常的最小代码:
#include <iostream>
#include <vector>
int main()
{
std::vector<char*> myVector;
myVector.push_back(new char('a'));
std::cout << *myVector[0] << std::endl;
}
我必须制作一个存储字符指针的向量。每个指针应该只指向一个字符,如 'a' 或 'b'。我没有收到任何编译错误,但是当我 运行 我的程序时,它崩溃了。我不能使用 std::string 或其任何功能,它们只能是字符。
std::vector<char*> myVector;
myVector.reserve(10);
myVector.at(0) = new char['a'];
为什么程序会崩溃?我不应该能够在内存中创建新的 char 指针吗?
我们逐行来看:
std::vector<char*> myVector;
是否需要保留一个字符指针向量?
下面的内容告诉我们你只想在其中存储 1 个字符,所以只需使用 std::string
,它会更容易。
myVector.reserve(10);
reserve() 方法仅用于预分配,它们实际上不会改变向量的大小,只会改变它的容量。对于每个向量:0 <= size <= capacity
。
如果您尝试访问 [0;size[
myVector.at(0) = new char['a'];
正如我们所说,.at(0)
调用将在此处抛出异常。但是右侧会发生一些有趣的事情。由于分配新数组通常使用 new T[N]
完成,其中 T 是元素的类型,N 是数组的大小,这将隐式地将 char 'a' 转换为 int(即 97)和因此分配一个包含 97 个未初始化元素的数组。
你应该使用 push_back
方法 vector
而不是使用 at
当你没有在 vector 中压入任何东西时。此外,您应该使用 new char('a')
而不是使用具有其他含义的括号。看看这个工作正常的最小代码:
#include <iostream>
#include <vector>
int main()
{
std::vector<char*> myVector;
myVector.push_back(new char('a'));
std::cout << *myVector[0] << std::endl;
}