Как я могу проверить, был ли сбой malloc() в Keil C?
unsigned char xdata malloc_mempool [0x100];
void display()
{
unsigned char xdata *ptr;
int a;
init_mempool (&malloc_mempool, sizeof(malloc_mempool));
ptr = malloc(9000000);
if(ptr != 0)
{
a = 7;
free(ptr);
} else {
a = 9;
}
}
Как указано в http://www.keil.com/support/man/docs/c51/c51_malloc.htm malloc вернет нулевой указатель, если памяти недостаточно для удовлетворения запроса на выделение. Очевидно, что в 8051 памяти не так много. Но результат a всегда равен 7.
9000000
даже не вписывается в int. Я не помню наизусть, что должен делать компилятор в этом случае, но вы можете изменить это значение на значение ‹ 65536. Правильно ли я предполагаю, чтоint
в вашем случае 16-битное? - person glglgl   schedule 07.06.2016malloc()
беретunsigned int
. - person Good Night Nerd Pride   schedule 07.06.2016int
на вашей платформе? - person Jabberwocky   schedule 07.06.2016malloc
занимает ровно столько, сколько предусмотреноinit_mempool()
, поэтому ради этого вопроса 256 байт. - person glglgl   schedule 07.06.2016for (;;) { unsigned char xdata *ptr; ptr = malloc(1000); if (ptr == NULL) crash(); }
. При этомcrash()
должен быть вызван в какой-то момент. - person Jabberwocky   schedule 07.06.2016unsigned int
иint
имеют одинаковые размеры, система с 16-битнымint
также имеет 16-битныйunsigned int
, где ограничение составляет 65535. - person glglgl   schedule 07.06.2016malloc
. Кстати, имеет ли смысл динамическое выделение памяти в системе с 512 байтами ОЗУ? - person Jabberwocky   schedule 07.06.2016ptr
, чтобы понять, почему оно не работает. - person glglgl   schedule 07.06.20169000000
? Обновите его, чтобы он был минимальным, полным и поддающимся проверке примером. Что именно возвращается вptr
? Что происходит, когда вы пытаетесь прочитать или записать в память, которуюmalloc()
якобы выделил? - person Good Night Nerd Pride   schedule 07.06.2016a
,a
оптимизируется. Утверждение ОП о том, чтоa
равно 7, основано на чтенииa
в неустановленном методе. Создайте реальный код, который печатает значениеa
. и значениеptr
. - person chux - Reinstate Monica   schedule 07.06.2016