c++ - 使用 vector

标签 c++ vector

我是一名学生,还没有学过 vector ,但我现在需要使用它们。我正在尝试制作一个结构 vector 。 struct 是汇编代码的标签。每次我想添加标签时,我都会调整 vector 的大小,但是,当我尝试从标签中检索信息时,它们都是一样的。不幸的是,我实际上不能分享我的代码,但我会展示我认为帮助我解决这个问题所必需的代码。那么,我做错了什么?如果您需要查看更多代码,请告诉我。

全局声明:

vector<Label> labeldir;

调整 vector 大小并添加信息,label是汇编代码文件中的标签名称:

labeldir.resize(labelnum + 1);
labeldir[labelnum].name = label;

注意:它在一个 while 循环中运行,每次找到一个标签时都会增加 labelnum。

访问每个标签名称的例子:

for (int i = 0; i < labeldir.size(); i++){
    cout << "Label entry " << i << " name : " << labeldir[i].name << endl;
}

对应的输出,注意问题(上面的代码是while循环,这是它的3次迭代):

Label entry 0 name : start
Label entry 0 name : done
Label entry 1 name : done
Label entry 0 name : five
Label entry 1 name : five
Label entry 2 name : five

汇编代码中的前3个标签,第一个和第二个标签之间会有线,但它们是常规指令。:

start   add 1   2   1   decrement reg1
done    halt                end of program
five    .fill   5

最佳答案

我敢打赌,Label 结构的 name 成员是 char *。这意味着您无需为每个标签创建单独的字符串,而只需创建单独的指针——但它们都指向同一个地方。

当您尝试打印内容时,它们都指向同一个缓冲区,因此每个 Label 都显示最近读入该缓冲区的名称。

解决方法:使用 std::string 而不是 char *

关于c++ - 使用 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16139232/

相关文章:

c++ - 在 Mac OS X 上使用 CUDA 5.5 时出现内核失败错误

java - 在 Java 中模拟 C++-typedef

c++ - 线程安全 vector

c++ - std::vector 内存问题

c++ - 指向 vector

c++ - 最常见的字母子串

c++ - 如何在 Linux 中从动态库(libsample.so)生成导入库(libsample.a)

c++ - BlackBerry 10 Cascades - 如何导航到另一个 CPP 类

c++ - C++ 中嵌套模板类返回类型的头文件中函数返回类型的语法

c++ - 如何在 C++ 和 OpenCV 中的 vector vector 中存储来自不同图像的多个描述符?