저는 C에서 전문가가 아니기 때문에 valgrind에 문제가 있습니다.함수 내 malloc/call-by-reference/valgrind
명령 줄에서 입력을 읽고 싶습니다.
이렇게하면 잘 작동합니다.
//call the function
char *command = getUserInput();
//function
char *getUserInput()
{
char *buffer = NULL;
char *temp = NULL;
unsigned int count = 0;
unsigned int lenght = 10;
char character = 0;
buffer = malloc((lenght+1)*sizeof(char));
if(buffer == NULL)
{
// printf(ERROR_OUT_OF_MEM);
// return EXIT_OUT_OF_MEM;
}
while((character = getchar()) != '\n')
{
if(count == lenght)
{
lenght += 10;
temp = realloc(buffer,lenght*sizeof(char));
if(temp != NULL)
{
buffer = temp;
}
else
{
free (buffer);
// printf(ERROR_OUT_OF_MEM);
// return EXIT_OUT_OF_MEM;
}
}
buffer[count] = character;
count++;
}
buffer[count] = '\0';
return buffer;
}
하지만 오류 반환 값은 없습니다.
내가 참조로 전화를 걸면 나는 valgrind 오류가 있다는 것을 이해하지 못한다. 그리고이 예제 함수 호출에서 반환 값을 요청하지 않는다는 것을 알고 있습니다. 어디에 문제가
==23886== Use of uninitialised value of size 4
==23886== at 0x40256BB: strcmp (mc_replace_strmem.c:426)
==23886== by 0x8049B39: commandHandler (assa.c:1199)
==23886== by 0x8049D6C: main (assa.c:1295)
==23886== Uninitialised value was created by a stack allocation
==23886== at 0x8049B00: commandHandler (assa.c:1189)
==23886==
==23886== Invalid read of size 1
==23886== at 0x40256BB: strcmp (mc_replace_strmem.c:426)
==23886== by 0x8049B39: commandHandler (assa.c:1199)
==23886== by 0x8049D6C: main (assa.c:1295)
==23886== Address 0x0 is not stack'd, malloc'd or (recently) free'd
내가 전혀 모르는 :
//call function
char *command = NULL;
getUserInput(command);
//function
int getUserInput(char *name)
{
char *temp = NULL;
unsigned int count = 0;
unsigned int lenght = 10;
char character = 0;
name = malloc((lenght+1)*sizeof(char));
checkMemory(name);
while((character = getchar()) != '\n')
{
if(count == lenght)
{
lenght += 10;
temp = realloc(name,lenght*sizeof(char));
if(temp != NULL)
{
name = temp;
}
else
{
free (name);
printf(ERROR_OUT_OF_MEMORY_MESSAGE);
return ERROR_OUT_OF_MEMORY;
}
}
name[count] = character;
count++;
}
name[count] = '\0';
return RETURN_SUCCESS;
}
Commandhandler 라인 1199 if (strcmp(command, "thing_to_compare") == 0)
Valgrind의입니다.
종류의, 당신은 것을 역 참조하는 필립
문제는 'commandHandler'라는 함수에 있다고합니다. 당신이 우리에게 보여주지 않으면 그 기능에 대해 합리적으로 말하는 것을 어떻게 기대합니까? –
죄송합니다. commandHandler를 잊어 버렸습니다. 나는 그 지위를 편집했다. – uskrd
'command'가 NULL이면 오류입니다. C에서 참조로 호출하는 것과 같은 것은 없습니다. 명령의 값을 함수에 보내고 거기에서 변경된 경우 원래 변수가 아닌 로컬 복사본입니다. – Marian