段错误

相信大多数在vc下的程序员不会对segmentation error太熟悉,因为vc下并没有给出具体的错误信息,只是在运行中给出提示框“程序.exe遇到问题需要关闭”。而且在编译过程中也没有给出任何的error和warning,相信vc在这方面稍微要薄弱一点。

庆幸在gcc则会给出具体的segmentation error。

其实通常的段错误都是由于解除引用一个未初始化或非法值的指针引起的。

 

下面是一段示例程序,将帮助你理解:

 

#include "stdio.h"

int main(int argc, char* argv[])
{
 printf("Hello World!/n");

 //session 1:解除引用一个未初始化或非法值的指针
 //试图往一个非法值的指针所指向的内存赋值
 int *p = NULL;
 *p = 16;

 //conclusion: 段错误通常是由于解除引用一个未初始化或非法值的指针引起的
 //很遗憾VC中并没有给出error或者warning,即使在运行中也没有给出明确的问题所在
 //只是提示程序.exe遇到问题需要关闭,相信这并没有给出太多有用的信息
 //值得庆幸的是,gcc中会给出segmentation error(core dump)
 //相信你得感谢它将你从地狱拉回天堂

 //一个更微妙的是,假如未初始化的指针恰好具有未对齐的值(对于指针所要访问的数据而言)
 //它将会产生总线错误。对于绝对大多数计算机而言确实如此,因为CPU总是先看到地址,
 //然后再把它发给MMU。
 return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
dlopen() 函数是一个动态链接库的加载函数,它用于在运行时加载动态链接库,并返回相应的句柄。然而,当使用 dlopen() 函数时,可能会出现段错误。 段错误是一种在程序运行过程中出现的错误,它表示程序访问了无效的、未分配的、越界或者只读内存区域,导致程序崩溃。 造成 dlopen() 函数段错误的原因可能有以下几种: 1. 动态链接库不存在或路径错误:如果指定的动态链接库文件不存在或路径错误,调用 dlopen() 函数时就会出现段错误。 2. 动态链接库缺少依赖关系:当动态链接库缺少依赖的其他动态链接库时,调用 dlopen() 函数可能会出现段错误。 3. 动态链接库中存在错误:在编写动态链接库时,如果存在错误或者内存越界的操作,使用 dlopen() 加载动态链接库时就可能导致段错误。 解决 dlopen() 函数段错误的方法: 1. 确保动态链接库存在且路径正确。 2. 检查动态链接库的依赖关系,确保所有依赖的动态链接库都存在。 3. 检查动态链接库的代码,确保没有错误或者内存越界的操作。 4. 使用调试工具,如 gdb,来查找段错误的具体原因,定位问题所在。 5. 如果问题仍然存在,尝试使用其他加载动态链接库的函数,如 dlfcn.h 头文件中的 dlsym() 函数。 总之,dlopen() 函数段错误往往是由于动态链接库的问题所导致的,可以通过确认动态链接库的存在、路径和依赖关系来解决。如仍无法解决,可以通过调试工具来定位问题所在。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值