지난 며칠 동안 C 클래스에 대한 과제를 수행하고 있었고 C의 realloc() 함수와 관련하여 궁금한 충돌이있었습니다. C/집안에있는 C++ 프로그래머는 내 코드에 무엇이 잘못 되었을지 즉시 대답 할 수 없었습니다.realloc()을 여러 번 호출하여 C 프로그램이 충돌합니다.
먼저 나는 한 함수 메모리 블록을 생성 :
char *line = (char *)malloc(sizeof(char) * BUFSIZE);
는 그때 getMoreBuf(start_of_block, end_of_block)
int getMoreBuf(char *start, char *end)
{
char *newBuf = 0;
int newSize = (end - start) + BUFSIZE;
newBuf = (char *)realloc(start, sizeof(char) * newSize);
if(NULL == newBuf) {
printf("No virtual RAM available");
}else{
start = newBuf;
}
return newSize;
}
가 BUFSIZE = 1가, 그것이 5 호출 이후가 충돌 BUFSIZE을 (설정 내용에 따라 호출
1) 또는 3 번째 호출 (BUFSIZE = 5)을 사용하고 읽은 문자를 난센스로 바꿉니다.누군가 내 오류를 지적하고 문제를 해결하기 위해 어디서 읽을 지 제안 할 수 있습니까? 도움을 주시면 감사하겠습니다. :)
보너스 질문 : 메모리 블록의 첫 번째 포인터와 두 번째 포인터 2를 가리키는 포인터 1로 메모리 블록을 malloc합니다. 내가 realloc() 블록 및 크기 문제로 인해 블록 이동, 포인터 2 여전히 이전 (지금은 쓸모없는) 블록 가리 킵니다 또는 메모리 블록의 새 위치 realloc 함께 "이동"합니까? ,
은 (또한 미래를 위해, 나는 새로운 질문에 여분의 질문을 넣어해야하거나 강하게 첫 번째 질문과 관련되어 있기 때문에 내가 여기에 둘 수 있습니다?)
는 귀하의 의견에 대한 여러분 모두 감사합니다 그것은 무엇이 잘못되었는지 알아 내는데 많은 도움이되었습니다. 만약 내가이 각각의 지긋 지긋한 포인터 사업에 대해 좀 더 이해할 수있는 어떤 형태로 도움이 되었기 때문에 나는 각각을 올바른 대답으로 표시 할 수있을 것이다. =)
[* 심지어 프로그래머 *] (http://c-faq.com/ptrs/passptrinit.html) 어쩌면 당신은 C 프로그래머를 시도 했어야 했습니까? – cnicutar
네, C와 C++ 프로그래머를 시험해 보았습니다. 나는 그것을 고정 시켰고 나는 링크를 조사 할 것이다. – Plastefuchs