微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

指向结构C ++中向量的指针

如何解决指向结构C ++中向量的指针

| 我遇到了一些崩溃,这与我在结构中使用向量可能需要使用大约6000个元素的事实有关。这是我的结构:
struct Students 
{
char* names;
std::vector<int> scores;
};
有没有一种方法可以使我的向量不会导致我的结构引起错误。这是我的电话代码
while(scores.hasNext())
{
    students[current_student].scores.push_back(grade);
}
我的问题:如果这是结构中向量大小分配的问题,我可以声明一个指向向量的指针并引用我的向量而不是将其实际存在于结构中吗? 成绩只是一个整数。     

解决方法

        您使我想起了以前有人遇到过的类似问题。由于没有为您的其余代码提供足够的信息,因此我在这里做一个猜测。 显然,
students
是结构
Students
的数组。假设它是在堆上分配的,如果您使用
malloc
进行分配,则它将无法正常工作,因为malloc无法正确初始化结构中的成员。特别地,这里的“ 5”是一个非POD对象,需要通过调用其构造函数来适当地构造它。
// the member in your structure is not initialized
students = (struct Students*) malloc(10 * sizeof(Students));

// oops.. scores is not initialized
students[0].scores.push_back(100);
要解决此问题,您需要致电
new
。它会通过调用其构造函数来正确地初始化成员。
// ok
students = new Students[10];
    ,        如果您在这行中从ѭ9的代码中得到一些错误
students[current_student].scores.push_back(grade);
这并不意味着问题出在矢量上。它的意思是您访问无效的内存(未初始化或未分配)。
current_student
可能超出了
students
的界限,或者您通过调用ѭ4a而不是
new
分配了
students
。 如果不给出更多代码,就无法回答您的问题。     ,        首先,您不应该将ѭ16视为需要特殊预防措施的怪异事物。他们相当于阶级 然后,如注释中所述,您应该添加真实代码,因为如果您确实这样做,则:
while(scores.hasNext())
{
  students[current_student].scores.push_back(grade);
}
那么您将继续向向量添加元素(如果听起来像
hasNext()
起作用),直到得到get19ѭ 最后,不必担心向量的大小:
std::vector
基本上已经是堆中向量的指针。无论您的向量变多“胖”,您的结构都将保持“小”。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。