나는이 모든 것을 함께 실행하기 시작했다.
그래서 나는 Valgrind의 오류 받고 있어요 :문자 배열을 올바르게로드합니까?
==25468== Invalid write of size 4
==25468== at 0x52CF64D: _IO_vfscanf (vfscanf.c:1857)
==25468== by 0x52D730A: __isoc99_fscanf (isoc99_fscanf.c:35)
==25468== by 0x402DDB: loadMindRAW (gplib.c:172)
==25468== by 0x4047EE: loadAgent (gplib.c:739)
==25468== by 0x4048BD: loadAgentsFromFile (gplib.c:799)
==25468== by 0x4010C3: initRound (gpfight.c:220)
==25468== by 0x400EBE: main (gpfight.c:99)
==25468== Address 0x584388d is 253 bytes inside a block of size 256 alloc'd
==25468== at 0x4C2B6CD: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
을 그리고 여기에 가해자의 :
void loadMindRAW(FILE* f_file, unsigned char* mind)
{
int i;
for(i=0; i < MIND_SIZE; i++)
{
fscanf(f_file,"%d,",&(mind[i]));
}
}
들어오는 부호 문자 배열이 malloc으로 할당 된 직전 : (MIND_SIZE는 256)
tmpAgent->mind = malloc(MIND_SIZE*sizeof(unsigned char));
loadMindRAW(f_file, tmpAgent->mind);
내 마음의 주소를 정확히 가리키고 있습니까? &(mind[i])
조금 kludgy 보였다. 원시 포인터 조작 mind+i
도 동일한 동작을합니다. 나는 여기서 간단한 것을 놓치고 있습니까?
인가 : 여기
는 루프를 다시 작성하는 방법입니까? 적절하게 태그하십시오. – dasblinkenlight
아, 알림을 보내 주셔서 감사합니다. – Philip