当malloc返回NULL时,有没有办法检测到使用VLA的堆栈上内存不足?
发布于 2013-02-28 17:55:31
C中没有任何东西可以保证成功声明VLA或检查有关内存使用的故障。这对于自动对象的任何声明都是相同的,无论是否为VLA。
发布于 2013-02-28 18:25:40
您可以期待崩溃,但最坏的情况是,事情似乎会正常工作,并且您将最终写入其他内存。至少在默认情况下,gcc不会生成试图验证内存是否可用的代码(尽管有一个选项),所以足够大的VLA可以在任何地方结束。在MacOS上,您只需要在线程进程中使用0.5MB的VLA,就可以意外地写入其他线程的堆栈。Linux上的10MB。
如果你不能保证一个VLA很小(少于一两页),就不要使用它。
发布于 2013-02-28 17:34:10
malloc()检查堆,VLAs增加堆栈大小。如果malloc()返回NULL,那么您的堆栈也可能已被填满。
正如WhozCraig所指出的,不要拿VLA当赌注。如果数组大小很大-使用malloc()
https://stackoverflow.com/questions/15131941
复制相似问题