int* memory = NULL;
memory = malloc(sizeof(int));
if (memory != NULL)
{
memory=10;
free(memory);
}
Это вылетит. Вы устанавливаете указатель на ячейку памяти 10 и затем просите систему освободить память. Крайне маловероятно, что вы ранее выделили часть памяти, которая начинается с 0x10, даже в безумном мире виртуальных адресных пространств. Кроме того, если malloc не удалось, память не была выделена, поэтому вам не нужно ее освобождать.
int* memory = NULL;
memory = malloc(sizeof(int));
if (memory != NULL)
{
memory=10;
}
free(memory);
Это тоже ошибка. Если malloc не работает, вы устанавливаете указатель на 10 и освобождаете эту память. (как прежде.) Если malloc преуспевает, то вы немедленно освобождаете память, а это значит, что выделять ее было бессмысленно! Теперь я представляю, что это просто пример кода, упрощенного, чтобы понять суть, и что это не присутствует в вашей реальной программе? :)