标签: stdvector

为什么push_back()会导致malloc()的ed数据崩溃?

为什么会崩溃?我确实发现malloc()没有调用构造函数,所以我手动调用它们,但它仍然崩溃,我不明白为什么.

PS.我知道std :: vector和new []存在.不要告诉我使用vectors/new []作为答案.

struct MyStruct {
    vector<int> list;
};
void make_crash(){
    MyStruct *array = (MyStruct *)malloc(100*sizeof(MyStruct));
    MyStruct element; // initialize element here since malloc() doesnt do it.
    array[0] = element; // copy, everything should be alright?
    array[0].list.push_back(1337); // nope, BANG!
    // The above line makes these:
    // First-chance exception at 0x7c970441 in test.exe: 0xC0000005: Access violation reading location 0xbaadf005.
    // First-chance exception at 0x00401cd0 in test.exe: 0xC0000005: Access violation reading location 0xbaadf00d.
    // Unhandled exception at 0x00401cd0 …
Run Code Online (Sandbox Code Playgroud)

c++ malloc stdvector visual-c++

0
推荐指数
1
解决办法
1379
查看次数

将字符串向量保存到磁盘不起作用

将字符串向量保存到磁盘不能按预期工作.我看到该文件已创建但有0个字节且没有条目.注意:我在Xcode(v4.3.3)上的MAC OS上编译C++代码.

向量和字符串的声明:

vector<string>taskVector;
string newTaskEntry;
Run Code Online (Sandbox Code Playgroud)

这是我在程序运行时向数组添加新字符串的方法:

taskVector.push_back(newTaskEntry);
Run Code Online (Sandbox Code Playgroud)

当用户退出程序时,我这样做:

        fstream file;
        file.open("data.txt", ios::out | ios::trunc);

        for (int i = 0; i > taskVector.size(); i++) {
            file.write(taskVector[i].c_str(), taskVector[i].length());
            file.close();
Run Code Online (Sandbox Code Playgroud)

知道为什么我没有看到任何条目吗?其次,当我能够将内容保存到磁盘时,您能否给我一个提示如何读回数据?

c++ string file-format file stdvector

0
推荐指数
1
解决办法
237
查看次数

std :: vector使用N个值在位置iOffset处更新

我有std::vector<int> around,我需要从位置X开始更新(/覆盖)N个值.

想象一下包含整个房间顶点的顶点列表.

随机地移动椅子,您只需更新属于椅子的那些顶点,因此您需要更新整个房间顶点列表中的一组椅子顶点.

伪代码:

void CVertexBuffer::Update(int iOffset, const std::vector<tVertex>& vVerticesList)
{

  // Update VAO
     ...


  //
  // Update m_vVertices (holding current vertices list) 
  // with vVerticesList (holding updated vertices data )
  // starting at position iOffset
  // The size of m_vVertices never changes
  // 
  // The Dumb way ( just for pseudocoding )

  for(int a = iOffset; a < vVerticesList.size(); a++)
  {
     m_vVertices[a] = vVerticesList[a-iOffset];
  }
}
Run Code Online (Sandbox Code Playgroud)

我可以用std::vector它来做这件事吗?

c++ stdvector

0
推荐指数
1
解决办法
102
查看次数

std :: vector.push_back()抛出badalloc异常

我开始写一个词法分析器,我做了以下文件来测试到目前为止所做的一切都运行正常:

Main.cpp的

#include <iostream>
#include "Lexer.h"
#include "Token.h"

int main(void)
{
    std::string str(""); // I'll use this to test expressions
    Lexer lexer(str);
    std::vector<Token> tokens = lexer.lex();
    for(auto it = tokens.begin(); it != tokens.end(); ++it)
    {
        std::string str;
        switch(it->type)
        {
        case TokenType::_EOF:
            str = "EOF";
            break;
        case TokenType::ERROR:
            str = "ERROR";
            break;
        case TokenType::SEMICOLON:
            str = "SEMICOLON";
            break;
        case TokenType::PLUS:
            str = "PLUS";
            break;
        case TokenType::LESS_THAN:
            str = "LESS_THAN";
            break;
        case TokenType::GREATER_THAN:
            str = "GREATER_THAN";
            break;
        case TokenType::INT:
            str = "INT"; …
Run Code Online (Sandbox Code Playgroud)

c++ exception vector stdvector

0
推荐指数
1
解决办法
2167
查看次数

如何从向量中删除所有元素

为什么这段代码不能从向量中删除所有元素?谢谢!

for (int i = 0; i < vec.size(); i++)
  vec.erase(vec.begin());
Run Code Online (Sandbox Code Playgroud)

c++ stdvector

0
推荐指数
1
解决办法
323
查看次数

如何在每个元素中使用自定义字符串设置std :: vector <std :: string>

我有配置,我需要设置到某种容器我尝试设置为std :: vector但我在两种方式获得编译错误:

 std::vector<std::string> ConfigVec= new std::vector<std::string>();
  ConfigVec->at(0).append("00000\
              11111\
               00000");

    ConfigVec->at(1) = "11111\
             00000\
            00000";
Run Code Online (Sandbox Code Playgroud)

没有很多std :: string声明,最简单的方法是什么

c++ stdstring stdvector

0
推荐指数
1
解决办法
254
查看次数

如何在std :: vector中查找模式

有没有直接的方法来查找std::vector容器中是否存在某组值(模式)?

假设我有这个数据容器:

std::vector<int> data { 0x00, 0xff, 0x00, 0x11, 0x12, 0x13, 0x14, 0x15 };
Run Code Online (Sandbox Code Playgroud)

而这个模式使用另一个std::vector容器描述:

std::vector<int> pattern { 0x00, 0xff, 0x00 };
Run Code Online (Sandbox Code Playgroud)

我想要:

  • 一个布尔值,表示模式的存在.

  • 最终,模式开始的索引.

c++ vector stdvector c++14

0
推荐指数
1
解决办法
1268
查看次数

如何检查c ++向量是否已包含和具有特定值的元素(在这种情况下为struct)?

我需要在添加新元素之前检查c ++向量中是否已存在具有特定值的元素(以避免重复)。

我检查了所有内容,并且该解决方案(下面的简化代码)似乎是最有效的,如果它确实起作用的话。

我遇到的问题特别是与此行:

“ if(std :: find(positions.begin(),positions.end(),pos)!= positions.end())”,

这给了我库内部的编译错误,说“二进制表达式的无效操作数('position'和'const position')”。

我知道我是C ++的新手,如果这是一个愚蠢的问题,我感到抱歉,但是有人可以告诉我我在做什么错吗?

值是结构的事实吗?它与值与指针/引用有关系吗(我怀疑是这样)?

struct position
{
    int column;
    int row;
};


int main ()
{
    std::vector<position> positions = {{0,0}, {0,1}, {0,2}, {1,0}, {1,1}, {1,2}};

    position pos = {2,1};

    if(std::find(positions.begin(), positions.end(), pos) != positions.end())
    {

        positions.push_back(pos);
    }
    else
    {
        std::cout << "Value is already present" << std::endl;
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我一无所知,并且真的坚持下去,这阻碍了我推进项目。

有人知道我在做什么错还是应该怎么做?

非常感谢!

c++ stdvector

0
推荐指数
1
解决办法
69
查看次数

我可以有一个与另一个载体共享存储空间的载体吗?

在我的应用程序的结构中,一个对象具有一个向量是另一个向量的子集是有意义的。我的意思是说,较小的存储包含在较大的存储中。

这在C ++中可能吗?我保证这两个向量都不会被调整大小,并且我可能可以做到这一点,以使子向量在包含向量之前被破坏。

最初,我认为创建从迭代器到大向量的子向量可以解决问题,但这会产生一个副本。我真的想要重定向裸指针。

c++ stdvector

0
推荐指数
1
解决办法
70
查看次数

C ++ std :: vector-如何修改由迭代器指定的元素?

我正在尝试更改向量的每个元素,但是由于对consts 的某些混淆,我的代码无法编译。这是一个大大简化的示例(我省略了向量的初始化):

std::vector<int> test;
for (auto iter = test.cbegin(); iter != test.cend(); ++iter)
{
    int v = *iter; // gets the correct element
    *iter = v * 2; // compile error
}
Run Code Online (Sandbox Code Playgroud)

编译器错误为“'iter':您无法分配给const变量”。如图所示,使用迭代器修改单个元素的正确方法是什么?

c++ stdvector

0
推荐指数
1
解决办法
62
查看次数

标签 统计

c++ ×10

stdvector ×10

vector ×2

c++14 ×1

exception ×1

file ×1

file-format ×1

malloc ×1

stdstring ×1

string ×1

visual-c++ ×1