分享

调试C语言时出现“null pointer assignment”

 凯哥资料库 2012-04-16
    null pointer assignment
    “null pointer assignment”是一个MS-DOS程序执行完毕后可能报告的一条出错消息。有些MS-DOS程序会分配一小块内存给空指针,让空指针也能“指向内存中的某个地址”,如果这些程序试图往这块内存中写入数据,就会覆盖掉原来由编译程序写在其中的数据。当程序执行完毕时,由编译程序生成的一部分代码会检查这块内存中的数据,如果发现原来的数据被修改了,就会报告"null’pointerassignment”这条消息。这条消息告诉你程序中存在野指针或越
  界下标,但你无法判断究竟错误出在程序中的哪一部分。有些调试程序和编译程序会提供一些支持,帮助你找出错误。   
    “Bus error:core dumped”和"Memory fault:core dumped”是运行在UNIX下的程序可能报告的两条出错消息,它们往往出现在程序进行读或写的过程中,都说明程序中存在野指针或越界下标,但所涉及的问题不仅仅局限于空指针。这两条出错消息对程序员更友好,因为“core dumped”这段消息告诉程序员已经将一个名为"core”的文件写入当前目录中,该文件记录了程序出错时栈和堆中的所有信息。借助于调试程序,程序员可以通过“core”文件找出程序
  中的野指针或越界下标。尽管这种方式并不告诉程序员出现野指针或越界下标的原因,但它能有效地帮助程序员解决问题。需要注意的是,如果程序未获得写当前目录的许可,就无法产生“core”文件,也就不会报告"core dumped”这段消息。
    注意;“core”是指磁芯,因为运行第一代UNIX系统的硬件使用磁芯而不是硅片作为随机存取存贮器。
    能帮助你发现内存分配错误的工具,有时同样能帮助你找出程序中的野指针和越界下标。
  在最好的情况下,这些工具几乎能找出所有这类错误
例如:
main()
{
char a;
printf("please input your name:");
gets(a);
printf("hello %s\n",a);
}
这里程序运行时就会显示“null pointer assignment”
如果改成:
main()
{
char a,b;
printf("please input your name:");
gets(a);
b=a;
printf("hello %s\n",b);
}
不直接引用a就不会有问题了

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多