2017-12-16 7 views
0

몇 가지 추가 기능 (끝에 추가 요소 삽입, 지정된 a 요소 찾기, 요소 제거)으로 목록을 만들려고합니다. 제거를 찾으면 괜찮습니다. 그러나 목록 자체 (및 입력 내용)에 문제가 있습니다. 목록을 만들고 그 요소를 인쇄 할 때 오류가 발생합니다.

이것은 실제 코드입니다. 좀 더 읽기 쉽도록 몇 가지 기능을 제거했습니다. 이상의 구성 요소는 프로그램이 충돌 프로그램의 시작 부분 또는 삽입 추가 요소 중 작성된 에러 제공된다

http://codepad.org/dTGjtYRx

스레드 1 : EXCBADACCESS (코드 = EXCI386GPFLT)

리스트가 인쇄 될 때 때로는 'name'이 예를 들어 -> \ 360-`과 같은 문자/숫자의 이상한 조합으로 인쇄됩니다.

답변

0

ListElement *e = malloc(sizeof(Book)); 

은 변경해야합니다

ListElement *e = malloc(sizeof(ListElement)); 

또한 모든 배열은 문자열 종료 문자를 유지하기 위해 크기 [51]이어야한다.

+0

감사합니다. 나는 malloc에 ​​그런 결함이 있다는 것을 어떻게 깨닫지 못했는지 모른다. 그러나 나는 숯불로 물건을 얻지 못한다. 문제가 무엇입니까? –

+0

'c'의 실제 문자열 길이는 strlen이 반환하는 것보다 항상 1 문자 길다. 거기에 '\ 0'종료 문자가 있기 때문이다. 길이 검사로 '50'을 사용하여 문자열을 복사 할 때 최대 크기를 수용하려면 실제로 51 자 배열이 필요합니다. 배열의 마지막 요소가 항상 '\ 0'인지도 확인해야합니다. – Serge