我是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;
}