为啥我的编译器对 c 字符串类型的向量存在内存问题?

Posted

技术标签:

【中文标题】为啥我的编译器对 c 字符串类型的向量存在内存问题?【英文标题】:Why does my compiler have a memory problem with a vector of c string type?为什么我的编译器对 c 字符串类型的向量存在内存问题? 【发布时间】:2019-01-26 06:04:52 【问题描述】:

为什么我不能创建一个 c 字符串时间的向量。当我创建一个时,我的编译器会引发内存问题。

#include <iostream>
#include <vector>
using namespace std;

int main() 
    vector<char[32]> buffVector;
    return 0;

【问题讨论】:

首先,这不是 C 字符串;它是char 的数组。其次,查看std::vector 中可包含的底层元素类型的要求,然后考虑char[32] 中的哪一个 符合。 (提示:copy-assignable 是什么意思?) “编译器抛出内存问题”是什么意思?描述症状(错误消息或其他)。如果您没有正确解释,请不要依赖人们猜测。 【参考方案1】:

来自https://en.cppreference.com/w/cpp/container/vector:

T 必须满足CopyAssignableCopyConstructible 的要求。

你不能使用vector&lt;char[32]&gt;的原因是char[32]既不是CopyAssignable也不是CopyConstructible。

你不能使用:

char a[32];
char b[32];

a = b;           // Can't assign an array to another.
char c[32] = b;  // Can't initialize an array using another.

幸运的是,有一个简单的解决方法。您可以将数组包装在 struct 中,并改用 structvector

struct foo  char array[32]; ;
std::vector<foo> v; // OK.

【讨论】:

以上是关于为啥我的编译器对 c 字符串类型的向量存在内存问题?的主要内容,如果未能解决你的问题,请参考以下文章

C ++(Windows)向量为啥会出现内存错误?

返回类型向量

为啥这个 C 向量循环不自动向量化?

C语言中 int 类型在内存中占4个字节 double类型在内存中占8个字节 为啥地址编译出来都是6个16进制数字

为啥我不能在 C++11 中创建一个 lambda 向量(相同类型)?

在线编译器对计算机内存的影响