我有寫/讀問題valgrind我不明白爲什麼。這些錯誤始終發生在相同的代碼塊上,只更改內存地址。代碼塊是:Valgrind警告寫入和讀取錯誤
void stringModifier(char *string) {
char *sourceString = string;
char *destinyString = sourceString;
while(*string != '\0') {
*string = tolower(*string);
if(*string != ' ') { *destinyString++ = *string; }
string++;
}
*destinyString = '\0';
}
int qsortComparison(const void *a, const void *b) {
return (*(char *)a - *(char *)b);
}
void qsortString(char *string, char *tempString) {
strcpy(tempString, string);
stringModifier(tempString);
qsort(tempString, strlen(tempString), sizeof(char), qsortComparison);
}
void outputReader(char *string1, char *string2) {
char *tempString1 = (char *) malloc (strlen(string1) * sizeof(char));
char *tempString2 = (char *) malloc (strlen(string2) * sizeof(char));
qsortString(string1, tempString1);
qsortString(string2, tempString2);
if(!strcmp(tempString1, tempString2)) { printf("V\n", string1, string2); }
else { printf("F\n"); }
}
我每次使用outputReader,並呼籲qsortString,的valgrind在的strcpy儆寫錯誤,之後儆在stringModifier閱讀錯誤,發生在同一個內存地址上。
sourcetring從哪裏來? – Jiminion
sourceString是stringModifier範圍,並採取信息qsortString的tempString參數。但我認爲,真正的問題是對的strcpy .. – GSchimiti
你有沒有分配給tempstring(ALLOC或malloc的)空間? – Jiminion