分段错误,传入指针
Segmentation fault, and passing in pointers
当运行下面的代码时,我得到一个Segmentation fault (core dumped)
。
我被告知segfault很可能是由于坏的指针造成的。现在,我对这门语言比较陌生,我确信我在这里做了一些明显的错误,但由于我的经验不足和目前的熟练程度,我无法发现它。
下面的代码在main
方法中创建PeekDeque<StringWrap>
对象的vector
。然后将指向vector
的指针传递给函数testNewWord
。这个函数然后创建一个新的PeekDeque<StringWrap>
对象,然后将它推到vector
的后面。好吧,反正这就是我要做的!
#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
#include <fstream>
#include <sstream>
using namespace std;
void testNewWord(string word, vector<PeekDeque<StringWrap> >* chains) {
PeekDeque<StringWrap>* newpd = new PeekDeque<StringWrap>(100);
newpd->pushFront(StringWrap(word));
chains->push_back(*newpd);
}
int main(int argc, char* argv[]){
vector<PeekDeque<StringWrap> >* chains = new vector<PeekDeque<StringWrap> >();
string word;
string infileName = argv[1];
ifstream* INFILEp = new ifstream(infileName.c_str(), ios_base::in);
while ((*INFILEp) >> word) {
testNewWord(word, chains);
}
INFILEp->close();
}
我在这里做错了什么?也许delete是在一个空指针上被调用?对我好点
这里使用指针的地方实际上都不需要(也不应该)是指针。相反,它们应该是常规对象,然后通过引用传递。
试试更换:
vector<PeekDeque<StringWrap> >* chains = new vector<PeekDeque<StringWrap> >();
与简单:
vector<PeekDeque<StringWrap> > chains;
和
void testNewWord(string word, vector<PeekDeque<StringWrap> >* chains) {
PeekDeque<StringWrap>* newpd = new PeekDeque<StringWrap>(100);
:
void testNewWord(const string& word, vector<PeekDeque<StringWrap> >& chains) {
PeekDeque<StringWrap> newpd(100);
阅读更多关于何时应该使用引用和指针的信息。一般来说,在c++中,只有在绝对不能使用引用的情况下才使用指针。您还必须将所有->
更改为.
,因为引用的行为就像它们是实际对象,而不是指向它的指针。
我没有看到你测试你的argc
参数。如果没有从命令行传递参数会发生什么?
您的代码似乎没有任何问题;你所做的是完全合法和正确的。所以可能是图片中缺少的其他东西,比如你如何调用代码
然而,我有一个建议
PeekDeque<StringWrap>* newpd = new PeekDeque<StringWrap>(100);
newpd->pushFront(StringWrap(word));
chains->push_back(*newpd); <----
对于最后一行的,调用复制构造函数并将新创建的对象复制到vector中。这实在是浪费资源。您可以将vector<PeekDeque<StringWrap> >* chains
替换为vector<PeekDeque<StringWrap>* >* chains
并保留指针。通过这种方式,您可以直接推送指针,并利用分配新对象所花费的时间。
- 为什么我在空指针错误(链表)中获取成员访问权限
- std::函数指针错误:无法将 &A::a 转换为类型 std::function<>&&
- 为什么我得到 munmap_chunk():无效的指针:错误
- 成员模板函数指针错误
- 删除指针时,未分配被释放的 C++ 指针错误
- Visual Studio 中的"指向引用的指针"错误不会按发生位置的文件名显示
- C++数组指针错误无法将“int*”转换为“int**”
- C++ 通过函数指针错误调用成员函数
- 从 BST 中删除元素(指针错误)
- 随机生成的多维布尔指针错误
- 在测试中使用unique_ptr时指针错误无效
- 使用 malloc 而不是 new 会导致 free():指针错误无效
- 非标准语法;使用 '&' 创建指向成员的指针错误,将成员函数分配给向量时出错
- 抽象类和唯一指针 c++ 错误
- 返回函数指针错误而不带类型定义
- 练习中出现空指针错误
- 指针错误导致的分段错误(简单..)
- free():C++中的指针错误无效
- 使用布尔值数组"表达式必须具有指向对象类型的指针"错误C++
- 指针错误的C 数组