int parseString(char* input, char*** words, int* size) {
char *word;
*words = malloc(sizeof(char));
word = strtok(input, " \n\t");
while (word != NULL) {
(*words)[*size] = malloc(sizeof(word) + 1);
strcpy((*words)[*size], word);
(*size)++;
*words = realloc(*words, ((*size) + 1) * sizeof(char));
word = strtok(NULL, " \n\t");
}
return 0;
}
문자열 (input
)을 받고 단어를 분리하여 저장하고 싶습니다. 네번째 반복에C realloc() char ** "다음 크기가 유효하지 않음"오류
(항상 규정에, 결코 빨리) 나는 realloc(...)
에서 오류가 발생하지 while 루프에서 :
realloc(): invalid next size: 0x0000000001641010 ***
Aborted (core dumped)
제작 후 @TaylorBrandstetter에 의해 만들어진 코드 외모를 @chux 변경된 제안 이 같은 : 당신이 NULL
을 통과 할 때
int parseString(char* input, char*** words, int* size) {
char *word;
*words = malloc(sizeof(char*));
word = strtok(input, " \n\t");
while (word != NULL) {
(*words)[*size] = malloc(strlen(word) + 1);
strcpy((*words)[*size], word);
(*size)++;
*words = realloc(*words, ((*size) + 1) * sizeof(char*));
word = strtok(NULL, " \n\t");
}
return 0;
}
우선,'* words'를위한 단일 바이트를 할당하는 것은 * 포인터 * (각 4 또는 8 바이트 가능성이 있음)의 * 배열 *을위한 충분한 공간이 아닙니다. 그리고'sizeof (word)'는 문자열의 크기를 알려주지 않고'char * '의 크기만을 알려줍니다. 'sizeof' 계산은 런타임 중에 발생하지 않는다는 것을 명심하십시오. –
컴파일러의 경고 (gcc에 대해 명령 줄 옵션'-Wall -Wextra -pedantic')를 활성화 한 다음 더 이상 경고가 발행되지 않을 때까지 코드를 수정하고 싶을 수도 있습니다. – alk
'sizeof (word)'대신'strlen (word)'을 제안하십시오. – chux