2011-04-20 5 views
0

안녕하세요. 나는 C++로 16 진수 계산기를 작성하고있다. 프로그램은 40 자리 피연산자를 처리 할 수 ​​있어야하므로 (그리고 16^40은 긴 long이 처리 할 수있는 것보다 훨씬 큽니다) 작업이 "손으로"수행되어야합니다.glibc가 감지되었지만 동적 메모리를 사용하고 있지 않습니까?

그래도 문제가 조금 있습니다. 내 Mac (OS X 10.6)에서는 터미널에서 Xcode와 g ++를 모두 사용하여 컴파일하고 실행할 수 있습니다. Windows에서도 Dev C++을 사용하는 친구가 있어도 괜찮습니다. 내 학교의 썬 클러스터에 SSH 경우, 그러나, 나는 g ++ 및 응용 프로그램이 실행되지만 함께 몇 가지 작업 후에 배변 :

"*** glibc detected *** ./a.out: free(): invalid pointer: 0xb786e6f4 ***". 

내 교수를 사용하고, 따라서 왜 무슨 일 클러스터를 추측하고있어 나는 점수를 잃어 버렸다.

은 내가 명시 적으로 메모리 할당을 사용하고 있지 않다으로이 발생하는 이유는 확실하지 않다, 나는이 오류에 읽은 모든에서, 보통 (항상)하지 않았다 뭔가를 삭제하려고의 결과입니다 새로운 연산자로 만들었습니다. 나는 그것이하고있는 앞뒤 문자열/char 변환 덕분인지 궁금해하고있다. 그러나 그것은 나에게 여전히 수수께끼 일 뿐이며 몇 가지 경우에 잘 돌아 간다.

기본적으로이 프로그램은 파일 이름을 물어보고 파일을 읽고 각 문자열을 수행해야 할 사항에 따라 해석 한 다음 파일 끝까지 수학을 수행합니다. http://pastebin.com/xx59eQsu

이미 문자 배열과 일부 문자열을 개조했습니다 여기

http://pastebin.com/1DW5pd6p 내가 (다시는 내 프로그램이 두 번째 수술 후 사망주의) 사용 된 데이터 파일은 다음과 같습니다

내 코드입니다 그 두 가지 작업을 할 수있게 해주는 것 같지만, 혼란 스럽습니다. 봐 주셔서 감사합니다, 모두들. 모든 응답을 부탁드립니다. 당신은 chr 범람하고

+1

음 ... 왜 16^40을 언급 했습니까? – fazo

+1

메모리 할당을 명시 적으로 수행하지는 않지만 메모리 할당 호출을 사용하는 문자열 및 스택 유형 연산을 사용하고 있습니다. 나는 것을 알고,하지만 난 그게 문제에 실행했던 같은 시간에 잘 모르겠지만, 지금은 알 - P –

+0

fazo는 경우에 사람이 sprinf를 사용하여 기지 사이의 변환을 제안했다. –

답변

3
string str; 
char chr[1]; 
... 
sprintf(chr, "%u", sum); 

이 가장 가능성이 std::string에서 사용하는 일부 내부 포인터 변수를 덮어 써서 str에 영향을 미친다. 문자열이 소멸되면이 잘못된 포인터를 삭제하려고 시도합니다.

chr 크기가 충분한 지 확인하십시오. char chr[32];은 통합 물을 인쇄하기에 충분해야합니다.

+0

고맙습니다. 고쳐 주셨습니다. 그래도 나는 지금 바보 같아. 간과 한 것 같아요. 다시 한 번 감사드립니다! –

관련 문제