2017-12-02 9 views
-2

오늘 일부 코드와 관련된 질문을했습니다.C++ - 해시 알고리즘 코드 반환 없음

나는 C에서 사용자 지정 해시 알고리즘을 ++ 작성했습니다. 그러나 프로그램은 오류없이 실행되지만 동시에 아무 것도 인쇄하지 않습니다.

내가 거기 밖으로 다른 모든 Alt 키 동전 가치가 아무것도 없을 것 알고에도 불구하고 Alt 키 동전 측 프로젝트를 진행하고있다. 난 내 동전의 블록 체인 및 기타 필요한 다른 해시 알고리즘을 사용하는 대신 내 자신의 해싱 알고리즘을 쓸 것이라고 결정했습니다.

은 내가 내 자신 만의 암호화 또는 해시를 사용하지 말아야 과거에 말했지만, 나는 그것을 시도 줄 것입니다 결정했습니다.

왜 누군가 제대로 작동하지 않는지 알 수 있습니까?

#include <iostream> 
#include <string> 
#include <sstream> 
#include <vector> 

typedef unsigned int dword; 

struct 
{ 
    dword count; 
    dword recept; 
    dword multiple = 13; 
    dword divisible = 1.6; 
    dword subhexvalue; 
    std::vector<dword> endrecept; 
} SMDH; 

inline dword smdh(std::string data) 
{ 
    for (SMDH.count; SMDH.count < data.length(); SMDH.count++) 
    { 
     SMDH.recept = SMDH.recept^(data[SMDH.count]) * SMDH.multiple/SMDH.divisible + SMDH.recept; 
    } 
    for (SMDH.count = data.length(); SMDH.count >= 0; --SMDH.count) 
    { 
     SMDH.subhexvalue = ((SMDH.recept >> (4 * SMDH.count)) % 16); 
     if (SMDH.subhexvalue < 10) {SMDH.endrecept.push_back(SMDH.subhexvalue); } 
     else { SMDH.endrecept.push_back((char)'A' + (SMDH.subhexvalue - 10)); } 
    } 
    for (SMDH.count = 0; SMDH.count < sizeof(SMDH.endrecept)/sizeof(SMDH.endrecept[0]); ++SMDH.count) 
    { 
     SMDH.recept = (SMDH.recept >> SMDH.endrecept[SMDH.count]); 
    } 
    return SMDH.recept; 
} 

int main() 
{ 
    std::cout << smdh("testing"); 
    std::getchar(); 
    return 0; 
} 

는 출력은 그 다음 그 자체를 첨가 한 다음 분할 승산 문자열에서 모든 바이트를 XOR 연산 될 수 있다고 가정한다. 그런 다음 16 진수로 변환한다고 가정합니다.

아무런 오류없이 답을 얻을 수 있습니다.

+0

죄송합니다. 선장이 명백한 경우 출력을 강제로 플러시하려고 했습니까? – amit

+0

내가 겹쳐 쓰려고하는 것은 recept 변수뿐입니다. 그래서 대체 변수를 만들었습니다. 나는 그것이 당신이 묻고있는 것이 었는지 모르겠다. ... – MAXBD

+0

오, 내가 데이터 인수를 수정하지도 않았다고 생각한다. 나는 데이터 변수가 아닌 recept 변수를 해쉬했다. 다시 시도 할 것이다. – MAXBD

답변

1

두 번째 루프가 완료되지 않습니다. SMDH.count이 부호없는 유형 인 경우 SMDH.count >= 0은 항상 true입니다. 루프가 모든 반복에서 벡터에 추가되므로 결국 프로그램에서 메모리가 부족하여 bad_alloc을 던지고 종료됩니다.