prev up next   top/contents search

comp.lang.c FAQ 列表· 问题 7.19

我的程序崩溃了,似乎是在malloc内部,但我看不出有什么不对。是malloc?


它是不幸的,非常容易损坏malloc内部的数据结构,而由此产生的问题可能很顽固。最常见的问题来源是向malloc已分配的区域写入比其分配的容量更多的数据;一个特别常见的错误是malloc(strlen(s))来解决这个问题,而不是strlen(s) + 1[脚注] 其他问题可能涉及使用指向已释放内存的指针,重复释放指针,释放非从malloc, free获取的指针,释放空指针,分配 0 字节对象(参见问题 11.26),或尝试realloc空指针(参见问题 7.30)。(最后三个——释放空指针、分配 0 字节对象和freereallocrealloc空指针——是符合标准的,尽管旧的实现经常有问题。)这些错误中的任何一个的后果可能在实际错误发生很久之后,并且在不相关的代码段中显现,这使得诊断问题非常困难。

大多数malloc的实现特别容易受到这些问题的影响,因为它们将关键的内部信息直接存储在它们返回的内存块的旁边,使得它们很容易被野指针攻击。

另请参见问题 7.157.2616.818.2


prev up next   contents search
关于此 FAQ 列表   关于 Eskimo   搜索   反馈   版权

Eskimo North 托管