Вы не должны free(nUmer[tempX]);
, потому что это не указатель.
Когда вы освобождаете один из указателей имени, вы можете установить его на NULL
.Затем цикл, который печатает массив, который может пропустить его.
for (tempX = 0; tempX < total; tempX++){
if (strcmp(searcher,nAmer[tempX])==0){ //what is better to replace this section?
free(nAmer[tempX]);
nAmer[tempX] = NULL;
}
}
printf("Let me read that back with removed user(s):\n");fflush(stdout);
for (tempX = 0; tempX<total; tempX++){
if (nAmer[tempX]) {
printf("Name: %s Number: %lf\n", nAmer[tempX], nUmer[tempX]);
}
}
У вас есть другая ошибка:
char *searcher = (char*) malloc(21 * sizeof(char*)); //temporary string made by the user to compare names
Это должно быть просто * sizeof(char)
(или вы можете просто пропустить этопоскольку sizeof(char)
определено как 1
).
К счастью, это выделяет больше памяти, чем необходимо, а не меньше.