C++ MacOS和Xcode的新功能;运行时Xcode中出现奇怪的错误。在Eclipse中工作得很好

C++ MacOS和Xcode的新功能;运行时Xcode中出现奇怪的错误。在Eclipse中工作得很好,c++,xcode,eclipse,C++,Xcode,Eclipse,更新:我可以解决这个问题。问题可以关闭!(如果您想知道如何:检查解决方案) 我有点小问题。我最近决定买一台MacBookAir,因为我们必须使用基于POSIX的函数,如pthread_create、fork等(并行编程)。这是我第一台装有MacOS的笔记本电脑 我安装了XCODE并启动了一个新的C++项目。然后我写了我的程序并试着运行它。没有错误,构建成功了,但当我尝试运行它时,在最奇怪的地方出现了SIGABRT错误。我不知道为什么会发生这种情况,所以我在我的windows桌面上的一个eclip

更新:我可以解决这个问题。问题可以关闭!(如果您想知道如何:检查解决方案)

我有点小问题。我最近决定买一台MacBookAir,因为我们必须使用基于POSIX的函数,如pthread_create、fork等(并行编程)。这是我第一台装有MacOS的笔记本电脑

我安装了XCODE并启动了一个新的C++项目。然后我写了我的程序并试着运行它。没有错误,构建成功了,但当我尝试运行它时,在最奇怪的地方出现了SIGABRT错误。我不知道为什么会发生这种情况,所以我在我的windows桌面上的一个eclipse项目中复制了代码,它工作得很好。你能帮我吗?可能是什么问题?我可能忘了安装什么东西了吗

#include <iostream>
#include <unistd.h>
#include <fstream>
#include <vector>
#include <map>
#include <iterator>
#include <cstdlib>
int main(int argc, const char * argv[])
{
    const char* sequenceFile=argv[1];
    const char* patternFile=argv[2];
    std::ifstream file;
    file.open(sequenceFile,std::ifstream::in);
    std::vector<std::string> k;
    std::string line;
    if(file.is_open()){
        while(std::getline(file,line)){
            k.push_back(line);
        }
    }
    int lengseq=atoi(k.at(0).c_str()); //for example SIGABRT here
    std::string sequence = k.at(1);
    file.close();
    file.open(patternFile,std::ifstream::in);
    k.clear();
    if(file.is_open()){
        while(std::getline(file,line)){
            k.push_back(line);
        }
    }
    std::map<std::string,int> patterns;
    for(unsigned i=1;i<k.size()-1;){
        patterns[k.at(i+1)]=atoi(k.at(i).c_str());
        i+=2;
    }
    //serial
    bool seqCheck = false;
    typedef std::vector<std::pair<std::string, int> > my_vector;
    my_vector patternOccurences;
    typedef std::map<std::string,int>::iterator it_type;
    for(it_type iterator=patterns.begin();iterator!=patterns.end();iterator++){
        for(int i = 1;i<lengseq;i++){
            if(i+iterator->second-1<=lengseq){
                for(int j=0;j<iterator->second;j++){
                    if(sequence.at(j+i-1)==iterator->first.at(j)){
                        seqCheck=true;
                    }
                    else{
                        seqCheck=false;
                        break;
                    }
                }
                if(seqCheck==true){
                    patternOccurences.push_back(std::make_pair(iterator->first,i));
                }
            }
        }
    }
    for(unsigned i =0;i<patternOccurences.size();i++){
        std::cout<<"Pattern: "<<patternOccurences.at(i).first<<" at index "<<patternOccurences.at(i).second-1<<std::endl;
    }

    return 0;

}
#包括
#包括
#包括
#包括
#包括
#包括
#包括
int main(int argc,const char*argv[]
{
const char*sequenceFile=argv[1];
常量char*patternFile=argv[2];
std::ifstream文件;
打开(sequenceFile,std::ifstream::in);
std::向量k;
std::字符串行;
if(file.is_open()){
while(std::getline(文件,行)){
k、 向后推(线);
}
}
int lengseq=atoi(k.at(0.c_str());//例如这里的SIGABRT
std::字符串序列=k.at(1);
file.close();
打开(patternFile,std::ifstream::in);
k、 清除();
if(file.is_open()){
while(std::getline(文件,行)){
k、 向后推(线);
}
}
地图模式;
对于(无符号i=1;i第一,i));
}
}
}
}

对于(unsigned i=0;i请粘贴准确的错误,您是否尝试将其运行到调试模式?很可能您的代码调用了未定义的行为。“可能向量没有填充”。我建议您先找出这个问题吗?我发布了它引发的异常。“可能向量没有填充”。我建议您先找出这个问题吗?”…我尝试移动文本文件,因为我不确定是否必须将它们放在其他地方,但这没有帮助。在eclipse上,向量会被完全相同的代码填充(并且我会得到想要的输出),这对我来说很奇怪。您是否尝试在调试器中运行它并查看它在何处引发异常?
else{
        std::cerr<<"Couldn't open file!";
        return 0;
    }