gpt4 book ai didi

c++ - 无法访问 vector 中的整数

转载 作者:太空宇宙 更新时间:2023-11-04 13:26:47 26 4
gpt4 key购买 nike

下面的程序遇到了段错误,我不知道为什么。

vector<int> *A::B(vector<int> *prefix, vector<int> *projected_tids, int support) {
vector<int> *result = NULL;
for(it_vec it = projected_tids->begin(); it != projected_tids->end(); ++it) {
if(projected_tids == NULL) {
cout<<"NULL";
} else {
cout<<"abc"<<endl;
cout<<&projected_tids<<"address"<<endl;
}
cout<<"here"<<projected_tids->size()<<" "<<prefix->size()<<endl;
cout<<"iteration: "<<projected_tids->at(1)<<endl; //seg fault here
map<int, bool> *transaction = (*processed_input)[*it]; //seg fault here as well, because of *it
bool found = true;
//some more code
}
}

提示看起来像这样:

abc
0x7ffe3894a198address
here16 1
Segmentation fault (core dumped)

GDB 也很困惑,可能是因为我用了很长时间的 C++,但我想不通为什么?以下是 GDB 输出:

(gdb) print projected_tids == (void *)0
$14 = false
(gdb) print *(projected_tids._M_impl._M_start)@1
Cannot access memory at address 0x0
(gdb) print *(projected_tids._M_impl._M_start)@3
Cannot access memory at address 0x0
(gdb) print projected_tids
$15 = (std::vector<int, std::allocator<int> > *) 0x60e000

vector 指针的分配在调用类中完成:

vector<int> *projected_tids = new vector<int>();

如果需要更多信息,请告诉我。

最佳答案

好吧,很多事情都出了问题。专注于问题,它看起来像:

  • projected_tids 不是 NULL(因为您已使用 cout 完成检查)
  • 然后您的代码转储出 projected_tids pointer 的地址(在堆栈上),而不是 vector 的地址.这没什么不对,但会有点误导。
  • 报告projected_tids包含16个元素
  • 当您查看第二项(at(1) 使用 0 索引)时,它会出现错误(即无效使用指针)。这是一个很大的暗示,表明出了点问题。

看起来 projected_tids 不是一个有效的 vector 。无论将数据传递到您的 A::B 方法中,都以某种方式传递了一个错误的指针。也许未初始化?你说它分配了,但也许它被删除了?

其他一些

  1. 如前所述,您在检查它是否为 NULL 之前使用了 projected_tids
  2. processed_input 指针是什么意思?任何地方都没有提到它
  3. 为什么不使用引用?它们更安全,并且与传递指针一样高效。

关于c++ - 无法访问 vector 中的整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33078155/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com