我運行代碼的valgrind未初始化值8
int fun(char* str) {
char* prt1;
char* ptr2;
char sstr[20];
strcpy(sstr, "\0");
ptr1 = str;
ptr2 = sstr;
while (((isspace(*ptr1)) || (iscntrl(*ptr1))) && (*ptr1 != '\0'))
ptr1++;
while (*ptr1 != '\0')
*ptr2++ = *ptr1++;
while (((isspace(*(ptr2 - 1))) || (iscntrl(*(ptr2 - 1)))) && (ptr2 > str))
ptr2++;
*ptr2 = '\0' strcpy(str, (S8*)sstr);
return (strlen(ptr1));
}
收到此錯誤使用尺寸8 的未初始化值的線路
while (((isspace (*(ptr2-1))) || (iscntrl (*(ptr2-1)))) &&
(ptr2 > str))
如果我把NULLP
分配給指針前檢查這是錯誤消失
if (ptr1 != NULLP && ptr2 != NULLP) {
ptr1 = str;
ptr2 = sstr;
}
它是否與Valgrind代碼錯誤或應該包括檢查?
感謝您的幫助。
請不要寫'*(PTR-1)'當你的意思是,不執行'PTR [-1]'。你知道,我們可能會用完括號。 – unwind 2014-09-04 14:25:03
添加空檢查後仍然存在循環*(ptr-1),爲什麼沒有錯誤? – user3679622 2014-09-04 14:28:15
空檢查調用UB,並且之後所有事情都可能發生 – 2014-09-04 14:33:53