2014-09-16 4 views
0

삽입 정렬을 사용하여 문자열을 정렬하기위한 프로그램입니다. 에러 리포트 :입력에 따라 Valgrind 오류가 다릅니다. 어떻게 해결할 수 있을까요?

== == 13,660의 strcpy 의 소스 및 목적지 오버랩 (0x7FF00066E, 0x7FF00066E) == 0x4A06E47에서 13,660 ==의 strcpy (mc_replace_strmem.c : 106)

을 이 원인이되는 행은 다음과 같습니다.

이는 min_index와 index_1이 동일 해지기 때문에 발생합니다. 이것은 입력 된 입력에 따라 다릅니다. 질문은 "입력에 의존하는 오류를 어떻게 해결할 것인가?"입니다. 내가 문제를 지나치게 단순화하고 있지 않다 희망

+1

대신 'memmove'를 사용하십시오. –

+1

문자열이 겹치는 오류입니까? 그런 다음 색인 계산에서 오류를 찾으십시오. 귀하의 경우 항목이 이미 제 위치에 있으므로 아무 것도 복사 할 필요가 없습니다. 'strcpy'를'if'에 랩핑하십시오. –

+0

@DanielKamilKozar 좋습니다. 방금 새로운 기능을 배웠습니다! 감사. 따라서 코드는'memmove ((char *) arg_array [min_index], (char *) arg_array [index_1], SIZE)'이어야만합니다. – 0aslam0

답변

0

...

당신은 수표를 추가하고 min_indexindex_1가 동일한 경우 호출을 피할 수 있습니다.

if (min_index != index_1) 
{ 
    strcpy (arg_array[min_index],arg_array[index_1]); 
} 
+0

예. 이 경우에 당신은 절대적으로 맞습니다!. 나는 넓은 의미에서 묻고 있었다. 내 질문 : 생성 된 오류가 입력의 수/유형에 따라 다르면 어떻게해야합니까? – 0aslam0

+0

하지만 당신이 나를 깨웠다! 상황에 따라 해결책을 찾아야합니다. 다시 한 번 감사드립니다! – 0aslam0

+0

@ xachu4u, 그건 사실입니다. 광범위한 문제에 대해 작동하는 일반적인 솔루션을 찾는 것도 좋습니다. –