这样分配内存是不好的做法吗?:
FOO *foo;
while (!(foo = malloc(sizeof(FOO)))) ;
我不知道有什么不好的做法,但这种做法并不常见。malloc()
故障通常表明您的程序不太可能从中恢复的主要系统问题。如果您的系统不同,您的示例可能非常实用。
注意:这个答案假设sizeof(FOO)
是"合理的",并且你的malloc()
不会因为你要求太多内存而拒绝。
这并不能"保证"malloc()
的结果。如果malloc返回NULL
,可能是有原因的(例如内存不足)。你可能会把自己扔进一个无限循环。
此外,如果您在Linux平台上运行此命令:
默认情况下,Linux遵循乐观内存分配策略。这意味着当malloc()返回非null时,不能保证内存确实可用。
这意味着假设一次又一次调用malloc确实返回了一些非null的东西,由于Linux的"乐观"策略,非null仍然不能保证你得到任何可以工作的东西。
我认为这段代码会让你成为调试的噩梦。