2012-05-23 2 views
0

동적으로 할당 된 변수를 함수에 전달하고 해당 코드에서 입력을 실행할 때 함수에서 돌아온 후 해당 입력 중 일부가 프로그램을 중단시킵니다. char **을 함수에 건네도 값을 변경하지 않습니까?

당신이 볼 수 있듯이

, 나는 한 번 divide의 말에, 두번 argv 배열을 테스트하고 다른 시간이 나는 divide에서 복귀 후. 첫 번째 검사에서 나는 argc에 인덱스 0에서 argv의 모든 값을 얻을 수 있지만, 2nd 검사에서 인덱스 0 (다시 maindivide에서 돌아온 후)는 for 루프 충돌 할 수 있습니다.

그래서 분명히 뭔가 잘못하고 있습니다. 어떤 생각입니까?

+1

거대한 코드 블록, 우리는 다시 만난다 .... –

+0

@ RichardJ.RossIII : 실제로 우리는 그렇다. 당신이 코드를 게시하도록 요청했습니다, 여기에 있습니다 :) – ron

+2

valgrind 님은 친구입니다. – dasblinkenlight

답변

1
argv =(char**) realloc(argv, (current+1)*sizeof(char*)); 

이것은 범인이다. realloc()을 호출하면 이전 블록의 데이터가 복사 된 새로운 (아마도 더 큰) 메모리 블록을 할당 한 다음 이전 블록의 할당을 해제 할 수 있습니다. 문제는 argv의 값을 main()으로 변경하는 것이 아니라 사용자가 이 아니고이 변경된 것입니다. main()의 argv을 새 블록을 가리 키도록 업데이트하지 않고 가리키는 블록의 할당을 해제합니다.

+0

좋습니다! 최대한 빨리 확인하겠습니다. – ron

+0

'main'의 프로토 타입으로 변경했습니다. 그것은 코드와 아무런 관계가 없으며, 그냥 빈 main()을 남겨 둘 수 있습니다. 그래서 나는 이것이 문제가 아니라고 생각한다. – ron

+1

아니요, 여전히 문제입니다. 당신은 여전히'divide()'함수에서'realloc()'을 호출하고 있는데, 여전히'argv'가'main()'에 매달려있는 포인터가되어 여전히'main()', 그리고 (나는 그것을 추측한다) 아직도 충돌하고있다. – Caleb

관련 문제