c ++ string str = argv [index]导致分段错误

时间:2018-01-18 12:35:15

标签: c++ command-line-arguments

我是c ++的新手,我试图覆盖operator new。 我得到了“分段错误”。我做了一些打印,并意识到问题是当我尝试从命令行参数获取argv字符串时,但我不明白为什么它是一个问题 - 我之前做过这个并且它有效。

 int main(int argc, char* argv[]){

    MemoryManager::getInstance(argc,argv);

 }


MemoryManager* MemoryManager::getInstance(){
    cout<<"empty getInstance\n";
    if(memMng==nullptr){
        bad_function_call();
    }
    return memMng;

}

MemoryManager* MemoryManager::getInstance(int argc,char* argv[]){
    if(memMng==nullptr){
        memMng=(MemoryManager*)malloc(sizeof(MemoryManager));
        memMng=new(memMng) MemoryManager(argc,argv);
        if(memMng==nullptr){
            throw bad_alloc();
        }
    }
    return memMng;

}

MemoryManager::MemoryManager(int argc,char* argv[]){
    if(argc<3){
        throw invalid_argument("invalid number of parameters!");
    }
    string str; 
    str=argv[2];//**problem might be here**
    cout<<"test\n";//it doesn't print test

    if(!isNumber(str)){
        throw invalid_argument("invalid size of heap!");
    }

    size_t size=atoi(str.c_str());
    if(size<0){
        throw invalid_argument("size cannot be negative ");
    }
    MemPool::setSize(size);
    memPool=MemPool::getInstance();
    begin=memPool->getPool();
    end=begin+size;
    current=begin;

}

0 个答案:

没有答案