При запуске valgrind для проверки ошибок в программе, написанной на C89 / 90, возникает ошибка Uninitialised value was created by a heap allocation
для написанной мной функции strToUpper()
, несмотря на инициализацию строки.
IЯ использую эту функцию для сравнения строк без учета регистра. К сожалению, C89, похоже, не включает функцию strcasecmp()
в <string.h>
, поэтому я написал свою собственную, которая вызывает функции strToUpper()
и strcmp()
.
CODE
char* strToUpper(char* inStr)
{
int i;
char *upperStr;
size_t strLen = strlen(inStr);
upperStr = (char*)malloc(sizeof(char) * (strLen + 1));
/* Does this for loop not initialise upperStr? */
for (i = 0; i < strLen; i++)
upperStr[i] = toupper(inStr[i]);
return upperStr;
}
ОШИБКА ВАЛЬГРИНДА
==27== Conditional jump or move depends on uninitialised value(s)
==27== at 0x4C31FAA: strcmp (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==27== by 0x406649: strcasecmp (stringPlus.c:178)
==27== ...
==27== by 0x400FEB: main (main.c:58)
==27== Uninitialised value was created by a heap allocation
==27== at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==27== by 0x4062E4: strToUpper (stringPlus.c:58)
==27== by 0x406622: strcasecmp (stringPlus.c:175)
==27== ...
==27== by 0x400FEB: main (main.c:58)
Есть идеи?