glib 2.0 API를 사용하고 있습니다. CSV 파일을 읽고 g_strsplit 함수를 사용하여 쉼표 사이의 데이터를 가져옵니다. 다음은 내 코드입니다.g_strsplit 에러 (무료() : 다음 크기가 유효하지 않습니다)
gchar* record = get_record_from_file();
printf("Record: %s\n", record); <--- WORKS CORRECTLY
gchar** data = g_strsplit(record, ",", 6); <-- ERROR HERE
free(record);
분할 방법을 사용할 때 오류가 발생합니다. 여기에 내 결과가있다.
기록 : 2,0.4,2,0,1,10,
* glibc에 감지 */경로 /로는/내/프로젝트 : 무료() : 다음 크기 (정상) 무효 : 0x0000000001c06a00 ***
나는 인터넷 검색을 시도했다. 분명히 this 질문과 대답에서 오류가 메모리와 관련이 있습니다.
이것은 메모리 오류임을 나타냅니다. 당신은 포인터를 malloc에 의해 할당되지 않은 (또는 이 new에 의해 생성되지 않은 객체를 삭제하는) 포인터를 해제하려고 시도하고 있거나 객체를 두 번 이상 자유롭게 삭제하려고 시도 중일 수 있습니다. 버퍼 오버플로가 있거나 쓰지 않아야하는 메모리에 쓸 수 있으므로 힙이 손상 될 수 있습니다.
g_strsplit가 올바르게 호출 되었습니까? 이 오류가 발생하는 이유는 무엇입니까?
:문자열 : 문자열을 분할합니다.
구분 기호 : 문자열을 분할 할 위치를 지정하는 문자열. max_tokens에 도달하지 않으면 분리 문자는 결과 문자열에 포함되지 않습니다.
max_tokens : 문자열을 분할 할 최대 개수입니다. 이 이 1보다 작 으면 문자열이 완전히 분리됩니다.
새롭게 할당 된 NULL로 끝나는 문자열 배열. 그것을 해제하려면 g_strfreev()를 사용하십시오.
반가워요. 귀하가 게시 한 코드에는 다른 어떤 것도 명백하지 않았습니다. valgrind와 같은 도구를 사용하면 향후 이와 같은 메모리 문제를 해결할 수 있습니다. – iain
모든 도움에 감사드립니다. 고맙습니다. :) – Goaler444