C语言编的程序编译没有错误,运行时出现unhandled exception in xx.exe 0xC000005:Access Violation

蜗sn牛 2016-06-13 10:20:50

typedef struct DCOMPLEX {
double re;
double im;
}dcomplex;

dcomplex *transmittedSeq = NULL;
transmittedSeq = (dcomplex *) malloc(SYMBOLLEN*sizeof(dcomplex));
if(transmittedSeq == NULL)
{
printf("transmittedSeq 分配内存失败!");
exit(1);
}

void modulator(int *encoded_bit, int *m_pSignalMapper, dcomplex *m_pSignal,dcomplex *signalSeq, int *randSeq)
{

int label, m;

for(int i = 0; i < SYMBOLLEN; i++)
{
randSeq[i] = rand() % ConstellationSize;
for(label = 0, m = 0; m < MODULATION_TYPE; m++)
label = (label<<1) + (int)encoded_bit[(i+1)*MODULATION_TYPE-m-1];
label = label ^ randSeq[i];
int index = m_pSignalMapper[label];
signalSeq[i] = m_pSignal[index];
}
}

当运行程序时,在modulator函数内运行没有错误,但是运行完函数后出现unhandled exception in xx.exe 0xC000005:Access Violation,查看汇编时标记到:add esp, 4 ;麻烦各位帮忙看下
...全文
608 7 打赏 收藏 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2016-06-13
  • 打赏
  • 举报
回复
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止。 尽量将代码贴全。
蜗sn牛 2016-06-13
  • 打赏
  • 举报
回复
引用 1 楼 lianshaohua 的回复:
运行完这个函数后你做了什么操作?
channel函数:

void channel(dcomplex *ricianSeq, dcomplex *signalSeq, double sigma)
{

    dcomplex temp;
    double nc, ns;
    for(int i = 0; i < SYMBOLLEN; i++)
    {
        ricianSeq[i] = rician_distribution();
        ComplexGauss(sigma, &nc, &ns);
        temp = cMult(ricianSeq[i], signalSeq[i]);
        signalSeq[i].re = temp.re + nc;
        signalSeq[i].im = temp.im + ns;
    }
}
蜗sn牛 2016-06-13
  • 打赏
  • 举报
回复
把修改后的signalSeq作为参数被channel函数调用; void channel(dcomplex *ricianSeq, dcomplex *signalSeq, double sigma);
ztenv 2016-06-13
  • 打赏
  • 举报
回复
运行完这个函数后你做了什么操作?
蜗sn牛 2016-06-13
  • 打赏
  • 举报
回复
引用 6 楼 qq423399099 的回复:
眼过千遍不如手过一遍!
书看千行不如手敲一行!
手敲千行不如单步一行!
代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。
提醒:再牛×的老师也无法代替学生自己领悟和上厕所!
单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。

单步,设断点都尝试过了,还是没有找到问题所在
for(int i = 0; i < SYMBOLLEN; i++)
{
randSeq[i] = rand() % ConstellationSize;
for(label = 0, m = 0; m < MODULATION_TYPE; m++)
label = (label<<1) + (int)encoded_bit[(i+1)*MODULATION_TYPE-m-1];
label = label ^ randSeq[i];
int index = m_pSignalMapper[label];
signalSeq[i] = m_pSignal[index];
}

执行完这个循环后程序里吗就出现
call stack 中提示:NTDLL! 775315ee(), 然后汇编跳到:775315EE add esp, 4
小灸舞 版主 2016-06-13
  • 打赏
  • 举报
回复
眼过千遍不如手过一遍!
书看千行不如手敲一行!
手敲千行不如单步一行!
代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。
提醒:再牛×的老师也无法代替学生自己领悟和上厕所!
单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。
蜗sn牛 2016-06-13
  • 打赏
  • 举报
回复
引用 4 楼 zhao4zhong1 的回复:
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止。 尽量将代码贴全。
完整代码太长了,我试下,谢谢
源码直接下载地址: https://pan.quark.cn/s/a4b39357ea24 ### 以单片机为核心的火灾报警系统毕业论文开题报告相关知识点 #### 一、课题背景及意义 ##### (1)课题背景 随着科学技术的持续进步和社会经济的高速发展,火灾现象已经成为一个日益突出的安全问题。特别是在人口高度聚集的城市区域,由于多种因素导致的火灾事故时有发生,给人员生命安全和财产带来了严重的威胁。因此,如何高效地预防火灾事故并迅速进行应对处理,成为了当前亟待解决的重要课题之一。传统的火灾监测与报警装置普遍存在响应时间较长、误报现象频繁、维护费用高昂等不足,难以适应现代社会对火灾防控的迫切需求。而采用单片机技术构建的智能火灾报警装置,凭借其反应迅速、运行可靠、成本较低等优势,正受到业界的广泛重视。 ##### (2)课题意义 以单片机为基础的火灾报警装置旨在综合运用现代电子工程技术和计算机科学方法,研发一种能够实时监控环境中的烟雾含量及温度变化,并在参数超过设定标准时迅速发出警示信号的智能化装置。此类系统不仅能够显著提升火灾预警的精确度和时效性,还能有效减少误报情况,从而为公民生命财产提供更加周全的安全保障。 #### 二、国内外研究发展情况 目前,在国内外范围内,关于智能火灾报警系统的研发工作已经取得了长足的进步。在国外,许多国家已经大规模部署了基于物联网理念的智能火灾监测系统,这些系统不仅具备基础的烟雾探测能力,还能通过无线通信网络即时将火灾数据传输至消防机构,大幅度提升了应急救援工作的效率。在国内,尽管相关技术的研究起步相对较晚,但近年来随着国家对公共安全领域的关注程度不断提高,基于单片机技术、嵌入式系统等智能火灾报警设备正经历着快速的发展阶段。 #### ...
源码下载地址: https://pan.quark.cn/s/7c5ebe7e1146 专门用于处理和播放监控系统生成的MP4视频文件的软件工具即为监控专用MP4文件播放器。此类播放器通常配备特殊功能,能够解析和播放那些因编码格式特殊或包含特定行业标准而在常规多媒体播放器上无法打开的MP4文件。作为常见类型,H264文件播放器得到了广泛应用,因为H264(也称为AVC,即Advanced Video Coding)是当前监控录像最常用的视频编码格式之一,其高效的压缩比率能在维持良好画质的条件下减小文件体积。 监控视频的编码方法通常与一般娱乐视频存在差异,可能包含更复杂的元数据或专有的加密技术,旨在保障数据的安全性和隐私性。因此,标准MP4播放器可能因无法识别这些特征而无法正常播放。针对这些特点进行优化的监控专用MP4文件播放器,则能够确保正确解码和播放相关文件。 描述中提及的"各种录像文件"可能涵盖以下几种情形: 1. 非标准分辨率:监控摄像头或许会采用非典型的分辨率,如320x240、720x480等,这些在标准播放器中可能无法得到支持。 2. 特殊帧率:监控录像或许会采用非常规的帧率,例如1fps、5fps等,这与一般视频的24fps、30fps有所不同。 3. 非线性时间轴:部分监控系统可能会进行时间戳重置,导致视频时间线呈现非线性,普通播放器可能无法正确处理。 4. 加密保护:为防止未授权的访问,监控录像可能被加密,需要特定的播放器才能进行解密。 5. 多通道音频:部分监控设备或许会包含多个音频通道,例如同时记录多路音频,普通播放器可能无法同时播放。 在提供的压缩包文件中,"下载说明.htm"或许包含了软件的安装指南、使用教程或注意事项,对于用户而言至关...

70,040

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧