当前位置:  技术问答>linux和unix

请教一个段错误的问题!

    来源: 互联网  发布时间:2016-03-22

    本文导语:  结构体是这样定义的: struct snd_sig_method {         uint8_t         *(*sign)(struct iovec *, int, int *, void *);         int             (*verify)(struct iovec *, int, uint8_t *, int,                   ...

结构体是这样定义的:
struct snd_sig_method {
        uint8_t         *(*sign)(struct iovec *, int, int *, void *);
        int             (*verify)(struct iovec *, int, uint8_t *, int,
                                  uint8_t *, int);
        void            *(*load_key)(const char *);
        void            (*free_key)(void *);
        int             (*init)(void);
        int             (*params_init)(struct snd_cga_params *);
        void            (*fini)(void);
        uint8_t         type;
        const char      *name;
        struct list_head list;
};
代码:
#include "common.h"

int main()
{
        char *keyfile="keyfile.pem";
   struct snd_sig_method *m;
   void *key;
   if ((key = m->load_key(keyfile)) == NULL)
      {
    printf("Notice!n");
    }
 return 0;
}
运行的结果显示:断错误。错误就出现在m->load_key(keyfile) ,是不是没有提前分配内存,我挺菜的,请大家指教!

|
何止啊,结构里这么多的函数指针,都需要赋值啊,
至少load_key需要赋值才能调用。

|
struct snd_sig_method *m;

这个指针还没有设定过值,m的值就是随机数,在执行到m->load_key(keyfile) 的时候,m可能指向任意内存,而那块内存是不能访问的。

所谓的野指针就是这个了。
至少要做出一个struct snd_sig_method 的实体,将m指向该实体。
并且,struct snd_sig_method 实体中的函数指针load_key也必须初始化,指向一个函数。

|
这是一个函数指针结构, 类似于LINUX DEVICE DRIVE里的设备(文件)结构.
结构定义本身没有问题, 问题在于:
struct snd_sig_method *m; 
这是创建了一个对象指针, 而不是对象, 需要malloc或者索性struct snd_sig_method m;

如果是对象的话:
if ((key = m->load_key(keyfile)) == NULL) 
改成:
if ((key = m.load_key(keyfile)) == NULL)
就可以了.

如果是对象指针的话
struct snd_sig_method *m;
m = (struct snd_sig_method *)malloc(sizeof(struct snd_sig_method));

总体来说, 只是没有分配内存的问题, 指针在没有分配内存时, 他本身只是一个指针, 不存在成员, 初始化后也没有地址.

    
 
 

您可能感兴趣的文章:

  • TOMCAT启动错误问题,请教!
  • 请教两个redhat9问题 iis7站长之家
  • 请教:提示错误:cannot resove symbol
  • 请教:如何判别数据帧的CRC错误?对齐错?
  • 请教高手,如下编译错误是什么原因
  • g++ 编译出现:undefined reference to 'main'错误,请教如何解决?
  • 解析XML文件时出现如下错误,请教大家可能是什么原因???
  • 请教一个错误的原因。
  • 问题太难,请教高手,关于raid1功能的错误检测的实现
  • 请教java错误提示的含义
  • 【请教】一个VM安装的错误?
  • 高分请教个链接错误!!!
  • 请教:TCP CONNECT失败,返回错误Operation now in progress
  • [请教]msgsnd()返回ENOTTY错误,如何解决?
  • java.exe以及相关程序环境运行时报内存错误,请教各位什么原因?
  • 内核安装错误,请教!
  • 请教,关于kernel错误,急ing!!!!!!!!!!!
  • 【请教】段错误gdb调试的问题
  • 请教:关于tar! 为什么总是出这样的错误呢????
  • 请教关于在redhat linux 9下的rhide1.5.1和dev-c++运行错误:Segmentation fault
  • 请教本地硬盘安装问题请教本地硬盘安装问题
  • 请教,请教,这个问题是为什么????
  • ■请教■请教redhat最基本的问题!
  • 请教一个 shell 问题,我用下面这个 shell 语句总是失败,请教
  • 高分请教,各位大侠,请教一个问题,理论高手请进??谢谢
  • 请教象我这样的硬盘应如何安装Linux,我昨天试装了,但有问题。(老问题了,也看了前面的帖子,但还是来请教,请多指教)
  • 请教一个函数入口处的汇编问题(压栈问题)
  • 请教!出现这个提示是什么原因..是模块版本问题,还是其他问题..http://220.114.102.28/xitong/ProductShow.asp?ArticleID=82
  • 请教两个小问题:一个cgywin下使用vi的问题,另一个socket的问题
  • 请教一个opengl的问题
  • 请教两个redhat9问题
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 请教Linux下pgadmin3-1.0.2的编译和安装!!高分请教!
  • 各位大虾,请教装了REDHAT9操作系统后,启动时无法引导到LINUX,请教该如何解决啊
  • 请教,请教,,,一定要看!!一定要看!!
  • 请教高手,小弟打印width=1500,height=600(A3纸)的Applet,在预览中是该区域是黑的,打印出来也是黑的,请教高手解决一下
  • :请教高手,小弟打印width=1500,height=600(A3纸)的Applet,在预览中是该区域是黑的,打印出来也是黑的,请教高手解决一下
  • 请教这种循环的执行过程
  • 请教如何在指定目录下查找包含指定文字的文件
  • 请教局域网中如何通过ip地址得到主机名
  • 请教,如何用虚拟订机安装liux
  • 【请教】LINUX 下SNMP的MIB开发
  • 请教两个shell
  • 请教高手:如何用gnome/gtk编写托盘程序
  • 菜鸟请教Linux
  • 请教semop()函数的用法、含义
  • 请教个,关于C编译器参数CFLAGS的问题(真诚请教,分不够了全部送出)
  • 请问如何在Redhat7.1下安装Ftp服务,如何开启Ftp帐号????请教!!!急急急急急急
  • Think in java 问题。(请教)
  • 请教下我的eth0为什么设置后重启会失败?
  • 请教:$PWD 这个东西是什么意思啊?谢谢!
  • 请教高手AIX中怎么删除行尾的字符^M


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3