【发布时间】:2017-01-20 06:44:59
【问题描述】:
所以我正在使用我的程序将我的 Rasperry Pi 相机流式传输到我的计算机,但是。下面列出的向量给我带来了问题。在大约 30 秒的流式传输后,它给了我std::bad_alloc。有没有办法在循环中一遍又一遍地重用这个向量(例如调整大小,清除)?
这是简化的代码:
while(isRunning)
{
recv(Connection, received_message, sizeof(received_message), NULL); //receiving the size of image in bytes
fileSize = atoi(received_message);
std::vector<char> fileData(fileSize); //<- this vector is giving me problems
recv(Connection, &fileData[0], CHUNK_SIZE, 0); //Receiving the image
//The code loops over and over again
}
【问题讨论】:
-
@MK.,OP 将指针传递给向量元素(因此,
char*),而不是整个向量。 -
@MK。这不是一个猜测。
std::vector<char>保证包含char的连续数组。不过,安全的做法是使用std::vector::data。 -
@user4581301:必须注意,只有当数组为空时,
data()更安全(与operator[]不同,它仍然保证返回一些有效指针);在所有其他情况下,它们保证完全相同。 -
@MK.: 因为标准是这样说的;另外,因为否则它会破坏许多有用的用例(与 C 的互操作性以及首先通过原始指针访问元素)。
-
OK,[vector.overview] 声明“一个向量满足所有要求......对于一个连续容器的 bool 以外的元素类型”这引发了一个支持连续容器的连续容器链[iterator.requirements.general] 要求的迭代器“对于整数值 n 和可解引用的迭代器值 a 和 (a + n),*(a + n) 等效于 *(addressof(*a) + n)”
标签: c++ linux windows vector raspberry-pi