다형성과 맵을 실험하기위한 샘플 C++ 프로그램을 작성했습니다. 나는 다음과 같은지도가 :"*"에서 C++ std :: map이 실패 했습니까?
map<char,Operation*> ops;
ops['+'] = new Addition();
ops['-'] = new Subtraction();
ops['*'] = new Multiplication();
ops['/'] = new Division();
각 클래스 이름으로 제안 작업을 Operation
에서 상속 수행합니다.
Everytrhing은 정상적으로 작동하지만 ops['*']
에 액세스하면 프로그램이 충돌합니다. 나는 다른 char
를 사용하는 경우,이 말 :
ops['x'] = new Multiplication();
프로그램이 작동합니다. 나는 주에 1 * 1
를 전달하면
, 충돌이 발생 (SegmentationFault
) :
int main(int argc, char** argv){
int x = atoi(argv[1]);
char op = argv[2][0];
int y = atoi(argv[3]);
map<char,Operation*> ops;
ops['+'] = new Addition();
ops['-'] = new Subtraction();
ops['*'] = new Multiplication();
ops['/'] = new Division();
cout<<ops[op]->op(x,y)<<endl;
}
가 :
전체 main
기능
코드를 편집하고
1 x 1
을 전달하면 올바르게 작동합니다.
내가 누락 된 것이 있습니까? std::map
? 어쩌면 와일드 카드 같은 것으로 사용되는 *
과 관련된 것이 있습니까?
용어 "메모리 누수"를보고 다시'new' 사용하지 않습니다. – nwp
'*'는 여러 쉘의 특수 문자로, 기본적으로 현재 디렉토리의 모든 파일로 확장됩니다.'1 \ * 1'을 전달하십시오. – Holt
@nwp 내가해야 할 때 이것을 깨끗하게하면 누설이 아닙니다. 여기 장난감 프로그램이고 모든 것이 바로 죽기 때문에 나는 그것을하지 않습니다! – magicleon