爲什麼這段代碼錯了?我是否錯過了delete
和delete[]
的行爲?刪除和刪除[]的確切行爲是什麼?
void remove_stopwords(char** strings, int* length)
{
char** strings_new = new char*[*length];
int length_new = 0;
for(int i=0; i<*length; i++) {
if(is_common_keyword(strings[i]) == 0) {
strings_new[length_new] = strings[i];
length_new++;
}
else {
delete strings[i];
strings[i] = nullptr;
}
}
delete[] strings;
strings = new char*[length_new];
for(int i=0; i<length_new; i++) {
strings[i] = strings_new[i];
}
delete[] strings_new;
*length = length_new;
}
說明:這段代碼應該包含一個C風格的字符串數組,並刪除它們中的某些特定字符串; C風格的字符串數組是使用new []創建的,每個C風格的字符串都是使用new創建的。代碼的結果是沒有單詞被取消,但數組僅被切片。
爲什麼會有'c'標籤? –
只是...不要這樣做。使用'std :: vector>'。 –
for'delete' vs'delete []':https://stackoverflow.com/questions/2425728/delete-vs-delete-operators-in-c –