(у @ Kristo правильная идея. Я просто добавлю комментарий к вопросу в ответ на вопрос.)
По сути, не удаляйте aNameCpy. Вы требуете, чтобы копия напоминала действительную, и поэтому ее не следует удалять. Вы должны удалять строки только в том случае, если и когда-либо удаляете весь хеш.
C ++ все еще очень новый для меня, поэтому я не могу понять, как манипулировать
неконстантная часть
Вы можете объявить keys
и key
const char **keys
, const char *key
. keys указатель на указатель на символ. Точнее, это указатель на неконстантный указатель на const char . Другими словами, вы можете изменить keys
, вы просто не можете изменить действительные символы, на которые он указывает (косвенно).
Итак, просто укажите const
в вашем объявлении storeKey int storeKey(const char **keys, const char *key)
и обновите arrayKeys соответственно const char *arrayKeys[300];
Еще одна проблема стиля: вам нужно скопировать строку внутри storeKey
, а не в main. Это лучший дизайн, так как читателю ясно, что storeKey «владеет» копией.
int storeKey(char **keys, const char *key) {
char * the_copy = new char[strlen(key)+1];
strcpy(the_copy, key);
... и т. Д.
Но, короче, используйте C ++ string
вместо всего этого, если можете!