学习工作BUG处理
记录一些学习工作时对程序BUG的处理
北冥有鱼丶丶
路漫漫其修远兮,吾将上下而求索...
展开
-
delete释放内存时卡在命令行窗口
如果指针指向的内存不是通过 new 关键字动态分配的,而是通过栈或全局/局部静态内存分配的,那么调用 delete[] 会导致未定义行为。确保在分配内存时,不要在后续的使用中越界访问该内存。越界访问可能破坏内存管理数据,导致未定义行为。最终调试发现,我的错误属于第四种,我在后续的代码中对ptr指向的动态内存越界访问了。如果 eTwoLineData 在被删除后再次被访问,就会发生未定义行为。如果同一个指针被删除了两次,这会导致未定义行为。原创 2023-10-19 14:34:46 · 164 阅读 · 0 评论 -
C6385:从“imageData”中读取的数据无效: 可读大小为“int __cdecl qCeil(double)(pixelWidth*pixelHeight)*1”个字节,但可能读取了“2”个
当使用unsigned char c = imageData[i]这种方式访问数组时,编译器默认根据对齐规则进行内存访问操作。对齐是指将变量存储在内存中的地址按照特定规则对齐的过程。当你使用unsigned char c = imageData[i]这种方式进行访问时,实际上编译器会认为你要读取imageData[i]这个字节,然后进行对齐操作,将它与下一个字节作为一个整体处理。这可能是因为读取一个单独的字节会导致未对齐的访问,可能会降低性能或导致硬件异常。因此,当你尝试读取一个字节时,编译器会默认读取原创 2023-09-14 09:43:14 · 393 阅读 · 0 评论 -
GetProcAddress无法获取动态库中函数的地址
原因在于GetProcAddress(hDll,"add")这个函数的第二个参数,第二个参数表示要调用的函数地址,add函数作为动态库dll2中的一个函数,在经过编译器编译后,采用_cdecl调用约定对应的函数名修饰规则对add函数名进行了修饰,修饰过后add的函数名变为?add@@YAHHH@Z,所以只需把第二个参数改为?add@@YAHHH@Z即可运行成功。原创 2023-06-09 10:40:24 · 600 阅读 · 0 评论 -
报错:dll不是有效的win32应用程序
原因在于Dll3动态库是默认的启动项目,我们需要修改应用程序text3为启动项目:右键text3->选择“设为启动项目”->问题解决原创 2023-06-01 11:54:21 · 1757 阅读 · 0 评论 -
error C1010: 在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include “pch.h“
大部分人好像用这两种解决方案就能好,我就一直不行还是报错,最后采取了如下解决方案解决了报错,如果你采取上述两种方式仍然无法解决报错,可以尝试下这种方法:原创 2023-05-30 16:58:26 · 4980 阅读 · 0 评论 -
C6031 返回值被忽略: “scanf” & C4996 ‘scanf‘: This function or variable may be unsafe.
不要用报错中建议的scanf_s来代替scanf,报错中讲到的scanf_s的函数是VS编译器提供的,不是C语言自己的,在其他的编译器(gcc,clang)下就没scanf_s的函数,也不认识这个函数,当你在代码中使用了scanf_s函数,你的代码在其他的编译器下就没法正确的编译,这就降低了代码的跨平台性,所以建议写代码时尽量使用标准C提供的功能和函数。原创 2022-05-12 11:17:03 · 691 阅读 · 0 评论