Редактировать: Исправление, некоторые люди осуждают меня за то, что я сказал, способ, которым вы выделили свой указатель, кажется лучшей практикой среди них, меня учили всегда идти с приведением типов в sizeof()
, но, очевидно, ваш путь правильнее, так что не обращайте внимания на то, что я сказал =)
Взглянув на http://en.wikipedia.org/wiki/Malloc#realloc, прежде чем, возможно, вам что-то помогло.
Вы не совсем понимаете sizeof()
- в нем есть значение размера аргумента, который вы ему передаете, в байтах. Например, sizeof(int)
будет равно 4 в большинстве 32-битных систем, но вы все равно должны использовать sizeof(int)
вместо 4
, потому что компиляция вашего кода в 64-битной системе (как пример) сделает это значение равным 8 и Ваш код все равно будет хорошо скомпилирован. Для чего вы выделяете память? Указатели? Если это так, вы должны использовать sizeof(void*)
вместо этого (вы можете сказать sizeof(int*)
, но общепринято не указывать компилятору, что вы хотите хранить в этих указателях, поскольку все указатели должны быть одинакового размера - так большинство программистов говорят sizeof(void*)
), если вам нужно место для символов, используйте sizeof(char)
и т. д.
Однако вы вправе сохранить возвращаемое значение realloc()
в новом указателе и проверить его, хотя многие программисты считают, что в системе всегда достаточно памяти, и обходятся ею.