当前位置: 首页 > news >正文

C语言-报错集锦-03-malloc(): memory corruption: 0x0000000001496d90 ***

一、报错信息

[2023-8]--[ Debug ]--Push Data To StAccessPath OK.
[2023-8]--[ Debug ]--Judge Vertex(0) Is Not Accessed.
[2023-8]--[ Debug ]--Judge Vertex(2) Is Accessed.
[2023-8]--[ Debug ]--Judge Vertex(3) Is Not Accessed.
[2023-8]--[ Debug ]--Judge Vertex(4) Is Accessed.
[2023-8]--[ Debug ]--Judge Vertex(5) Is Not Accessed.
[2023-8]--[ Debug ]--Judge Vertex(6) Is Accessed.
[2023-8]--[ Debug ]--Judge Vertex(7) Is Accessed.
[2023-8]--[ Debug ]--Judge Vertex(8) Is Not Accessed.
[2023-8]--[ Debug ]--Judge Vertex(9) Is Not Accessed.
[2023-8]--[ Debug ]--Judge Vertex(10) Is Not Accessed.
[2023-8]--[ Debug ]--Judge Vertex(11) Is Not Accessed.
[2023-8]--[ Debug ]--Push Data To Lowest Edge Array OK.
[2023-8]--[ Debug ]--ReturnWeightVal : 32767, Find All Access Path Ahead Of Time.
[2023-8]--[ Debug ]--No Need To Traverse, Find OK, i : 1, StartVertexIndex : 1
[2023-8]--[ Debug ]--Push Data To StDijkstraAccees OK.
*** Error in `./TestGraph': malloc(): memory corruption: 0x0000000001496d90 ***
======= Backtrace: =========
/lib64/libc.so.6(+0x82b36)[0x7f48f5257b36]
/lib64/libc.so.6(__libc_malloc+0x4c)[0x7f48f525a78c]
./TestGraph[0x400fb9]
./TestGraph[0x400dda]
./TestGraph[0x405f2a]
./TestGraph[0x4062ba]
./TestGraph[0x406700]
./TestGraph[0x40700e]
/lib64/libc.so.6(__libc_start_main+0xf5)[0x7f48f51f7555]
./TestGraph[0x400829]
======= Memory map: ========
00400000-0040a000 r-xp 00000000 fd:00 2549952                            /opt/Developer/ComputerLanguageStudy/C/DataStructureTestSrc/Graph/TestGraph
00609000-0060a000 r--p 00009000 fd:00 2549952                            /opt/Developer/ComputerLanguageStudy/C/DataStructureTestSrc/Graph/TestGraph
0060a000-0060b000 rw-p 0000a000 fd:00 2549952                            /opt/Developer/ComputerLanguageStudy/C/DataStructureTestSrc/Graph/TestGraph
01493000-014b4000 rw-p 00000000 00:00 0                                  [heap]
7f4890000000-7f4890021000 rw-p 00000000 00:00 0 
7f4890021000-7f4894000000 ---p 00000000 00:00 0 
7f48959f8000-7f4895a0d000 r-xp 00000000 fd:00 33554509                   /usr/lib64/libgcc_s-4.8.5-20150702.so.1
7f4895a0d000-7f4895c0c000 ---p 00015000 fd:00 33554509                   /usr/lib64/libgcc_s-4.8.5-20150702.so.1
7f4895c0c000-7f4895c0d000 r--p 00014000 fd:00 33554509                   /usr/lib64/libgcc_s-4.8.5-20150702.so.1
7f4895c0d000-7f4895c0e000 rw-p 00015000 fd:00 33554509                   /usr/lib64/libgcc_s-4.8.5-20150702.so.1
7f4895c0e000-7f48f51d5000 rw-p 00000000 00:00 0 
7f48f51d5000-7f48f5399000 r-xp 00000000 fd:00 33780350                   /usr/lib64/libc-2.17.so
7f48f5399000-7f48f5598000 ---p 001c4000 fd:00 33780350                   /usr/lib64/libc-2.17.so
7f48f5598000-7f48f559c000 r--p 001c3000 fd:00 33780350                   /usr/lib64/libc-2.17.so
7f48f559c000-7f48f559e000 rw-p 001c7000 fd:00 33780350                   /usr/lib64/libc-2.17.so
7f48f559e000-7f48f55a3000 rw-p 00000000 00:00 0 
7f48f55a3000-7f48f55c5000 r-xp 00000000 fd:00 33780343                   /usr/lib64/ld-2.17.so
7f48f57be000-7f48f57c4000 rw-p 00000000 00:00 0 
7f48f57c4000-7f48f57c5000 r--p 00021000 fd:00 33780343                   /usr/lib64/ld-2.17.so
7f48f57c5000-7f48f57c6000 rw-p 00022000 fd:00 33780343                   /usr/lib64/ld-2.17.so
7f48f57c6000-7f48f57c7000 rw-p 00000000 00:00 0 
7ffc944b9000-7ffc944db000 rw-p 00000000 00:00 0                          [stack]
7ffc94516000-7ffc94518000 r-xp 00000000 00:00 0                          [vdso]
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0                  [vsyscall]
已放弃(吐核)

二、问题分析

[gbase@czg2 Graph]$ gdb TestGraph core.57248 
GNU gdb (GDB) Red Hat Enterprise Linux 7.6.1-120.el7
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-redhat-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /opt/Developer/ComputerLanguageStudy/C/DataStructureTestSrc/Graph/TestGraph...done.
[New LWP 57248]
Core was generated by `./TestGraph'.
Program terminated with signal 6, Aborted.
#0  0x00007f48f520b387 in raise () from /lib64/libc.so.6
Missing separate debuginfos, use: debuginfo-install glibc-2.17-326.el7_9.x86_64 libgcc-4.8.5-44.el7.x86_64
(gdb) bt
#0  0x00007f48f520b387 in raise () from /lib64/libc.so.6
#1  0x00007f48f520ca78 in abort () from /lib64/libc.so.6
#2  0x00007f48f524df67 in __libc_message () from /lib64/libc.so.6
#3  0x00007f48f5257b36 in _int_malloc () from /lib64/libc.so.6
#4  0x00007f48f525a78c in malloc () from /lib64/libc.so.6
#5  0x0000000000400fb9 in MyMalloc (size=2048) at ../PublicFunction/PublicFunction.c:50
#6  0x0000000000400dda in LogFormat (PrintLevel=4, StrFormat=0x407fb0 "%s\n") at ../Log/Log.c:130
#7  0x0000000000405f2a in PushData2StDijkstraAccees (StDA=0x1495c50, InsertNodeIndex=3, StartIndex=2, EndIndex=4, Weight=1) at ShortestPath.c:303
#8  0x00000000004062ba in StatisticsStDijkstraAccees (StDks=0x1496460, StDA=0x1495c50, StartVertexIndex=1) at ShortestPath.c:353
#9  0x0000000000406700 in DijkstraAlgorithm (AMG=0x7f4895c0e010, StDA=0x1495c50, StartVertexIndex=1) at ShortestPath.c:437
#10 0x000000000040700e in main () at main.c:77
(gdb) 

函数调用栈中的第4层发现和malloc有关,第一个想法难道触发malloc的BUG了,应该不会,毕竟malloc都是大佬实现的,上一层的MyMalloc和LogFormat都是我自己封装的,使用了这么久都没有问题,那就看一下最近的函数实现吧,实在不行再从这两个函数出发,先从第7帧的PushData2StDijkstraAccees看起。

(gdb) f 7
#7  0x0000000000405f2a in PushData2StDijkstraAccees (StDA=0x1495c50, InsertNodeIndex=3, StartIndex=2, EndIndex=4, Weight=1) at ShortestPath.c:303
303         LogFormat(Debug, "%s\n", "Push Data To StDijkstraAccees OK.");
(gdb) l PushData2StDijkstraAccees
277         LogFormat(Debug, "%s\n", "Push Data To Lowest Edge Array OK.");
278         return SuccessFlag;
279     }
280
281     Status PushData2StDijkstraAccees(StDijkstraAccees* StDA, VertexIndexType InsertNodeIndex, VertexIndexType StartIndex, VertexIndexType EndIndex, WeightType Weight)
282     {
283         JudgeAllNullPointer(StDA);
284
285         if (InsertNodeIndex >= StDA->AccessPathMaxLen)
286         {
(gdb) 
287             LogFormat(Error, "Parameter InsertNodeIndex(%d) Need < AccessPathMaxLen(%d), Exit.\n", InsertNodeIndex, StDA->AccessPathMaxLen);
288             exit(ExceptionExitFlag);
289         }
290
291         if (StDA->AccessPath[InsertNodeIndex]->AccessArrayLen == StDA->AccessPath[InsertNodeIndex]->AccessArrayMaxLen)
292         {
293             LogFormat(Error, "AccessPath[%d] Is Full, AccessArrayMaxLen : %d, Exit.\n", InsertNodeIndex, StDA->AccessPath[InsertNodeIndex]->AccessArrayMaxLen);
294             exit(ExceptionExitFlag);
295         }
296         
(gdb) 
297         StDA->AccessPath[InsertNodeIndex]->AccessArray[StDA->AccessPath[InsertNodeIndex]->AccessArrayLen].StartVertexIndex = StartIndex;
298         StDA->AccessPath[InsertNodeIndex]->AccessArray[StDA->AccessPath[InsertNodeIndex]->AccessArrayLen].EndVertexIndex   = EndIndex;
299         StDA->AccessPath[InsertNodeIndex]->AccessArray[StDA->AccessPath[InsertNodeIndex]->AccessArrayLen].Weight           = Weight;
300
301         StDA->AccessPath[InsertNodeIndex]->AccessArrayLen++;
302
303         LogFormat(Debug, "%s\n", "Push Data To StDijkstraAccees OK.");
304         return SuccessFlag;    
305     }
306
(gdb) p InsertNodeIndex
$1 = 3
(gdb) p StartIndex
$2 = 2
(gdb) p EndIndex
$3 = 4
(gdb) p Weight
$4 = 1
(gdb) set print pretty on
(gdb) p *StDA
$5 = {AccessPath = 0x1495c70, AccessPathMaxLen = 11
}
(gdb) p StDA->AccessPath[InsertNodeIndex]->AccessArrayLen
$6 = 1
(gdb) p StDA->AccessPath[InsertNodeIndex]->AccessArray[0]
$7 = {StartVertexIndex = 2, EndVertexIndex = 4, Weight = 1
}

访问都正常,数据写入也都正常,难道问题不在这一层中,看看上一层的函数StatisticsStDijkstraAccees。

(gdb) f 8
#8  0x00000000004062ba in StatisticsStDijkstraAccees (StDks=0x1496460, StDA=0x1495c50, StartVertexIndex=1) at ShortestPath.c:353
353             PushData2StDijkstraAccees(StDA, 
(gdb) l StatisticsStDijkstraAccees
304         return SuccessFlag;    
305     }
306
307     //统计起始节点到各个节点的访问路径。
308     Status StatisticsStDijkstraAccees(StDijkstra* StDks, StDijkstraAccees* StDA, VertexIndexType StartVertexIndex)
309     {
310         JudgeAllNullPointer(StDks);
311         JudgeAllNullPointer(StDA);   
312
313         VertexIndexType  i            = 0;
(gdb) 
314         VertexIndexType  j            = 0;
315         VertexIndexType  x            = 0;
316         VertexIndexType  TmpIndex     = 0;//临时变量,存放顶点索引信息。
317         VertexIndexType* VisitedArray = (VertexIndexType*)MyMalloc(StDks->PathLenArrayLen * sizeof(VertexIndexType));//存放已经命中的索引。
318
319         for (i = 0; i < StDks->PathLenArrayMaxLen; i++)
320         {
321             //LogFormat(Debug,"i : %d, StartVertexIndex : %d\n",i,StartVertexIndex);
322
323             if (StDks->LowestEdgeArray[i].AccessPath->AccessArrayLen == 0)//访问节点数组长度为0时,跳过。
(gdb) 
324             {
325                 continue;
326             }
327             
328             //LogFormat(Debug,"(%d,%d,%d,%d,%d,%d)\n",VisitedArray[0],VisitedArray[1],VisitedArray[2],VisitedArray[3],VisitedArray[4],VisitedArray[5]);
329             //取最外层的顶点信息,如果起始节点等于传入的起始节点索引,不需要寻找其祖先顶点。
330             if (StDks->LowestEdgeArray[i].AccessPath->AccessArray[StDks->LowestEdgeArray[i].AccessPath->AccessArrayLen - 1].StartVertexIndex == StartVertexIndex)
331             {
332                 LogFormat(Debug, "No Need To Traverse, Find OK, i : %d, StartVertexIndex : %d\n",i,StartVertexIndex);
333                 PushData2StDijkstraAccees(StDA, 
(gdb) 
334                                           i, 
335                                           StartVertexIndex, 
336                                           StDks->LowestEdgeArray[i].AccessPath->AccessArray[StDks->LowestEdgeArray[i].AccessPath->AccessArrayLen - 1].EndVertexIndex, 
337                                           StDks->LowestEdgeArray[i].AccessPath->AccessArray[StDks->LowestEdgeArray[i].AccessPath->AccessArrayLen - 1].Weight);
338                 continue;
339             }
340
341             for ( x = 0; x < StDks->PathLenArrayMaxLen; x++)//初始化VisitedArray数据
342             {
343                 if (StDks->LowestEdgeArray[i].AccessPath->AccessArrayLen == 0)
(gdb) 
344                 {
345                     VisitedArray[x] = VISITED_FLAG;
346                 }
347                 else
348                 {
349                     VisitedArray[x] = NOT_VISITED_FLAG;
350                 }
351             }
352             
353             PushData2StDijkstraAccees(StDA, 
(gdb) 
354                                 i, 
355                                 StDks->LowestEdgeArray[i].AccessPath->AccessArray[StDks->LowestEdgeArray[i].AccessPath->AccessArrayLen - 1].StartVertexIndex, 
356                                 StDks->LowestEdgeArray[i].AccessPath->AccessArray[StDks->LowestEdgeArray[i].AccessPath->AccessArrayLen - 1].EndVertexIndex, 
357                                 StDks->LowestEdgeArray[i].AccessPath->AccessArray[StDks->LowestEdgeArray[i].AccessPath->AccessArrayLen - 1].Weight);
358             VisitedArray[i] = VISITED_FLAG;
359             TmpIndex        = StDks->LowestEdgeArray[i].AccessPath->AccessArray[StDks->LowestEdgeArray[i].AccessPath->AccessArrayLen - 1].StartVertexIndex;
360             j               = 0;
361
362             while (TmpIndex != StartVertexIndex)
363             {
(gdb) p StDks->PathLenArrayLen
$26 = 4
(gdb) p StDks->PathLenArrayMaxLen
$27 = 11

发现问题了,317行VisitedArray长度为4,341行开始初始化了11次,数组越界访问了,然后插入数据的时候就崩了。将VisitedArray的申请长度变为11,就正常了。

三、总结

malloc(): memory corruption错误不一定和malloc有关,可能是因为哪里对内存进行了误操作,例如:数组越界访问并使用,也有可能导致。像我这个问题就是能够稳定复现的,如果不喜欢gdb调试的方式,也可以把有问题的函数注释掉,看还报不报错,之后再根据情况具体问题具体分析,主要是还是多测试不同的数据和多思考。

相关文章:

C语言-报错集锦-03-malloc(): memory corruption: 0x0000000001496d90 ***

一、报错信息 [2023-8]--[ Debug ]--Push Data To StAccessPath OK. [2023-8]--[ Debug ]--Judge Vertex(0) Is Not Accessed. [2023-8]--[ Debug ]--Judge Vertex(2) Is Accessed. [2023-8]--[ Debug ]--Judge Vertex(3) Is Not Accessed. [2023-8]--[ Debug ]--Judge Vertex…...

现代C++中的从头开始深度学习:【5/8】卷积

一、说明 在上一个故事中&#xff0c;我们介绍了机器学习的一些最相关的编码方面&#xff0c;例如 functional 规划、矢量化和线性代数规划。 现在&#xff0c;让我们通过使用 2D 卷积实现实际编码深度学习模型来开始我们的道路。让我们开始吧。 二、关于本系列 我们将学习如何…...

以太网帧格式与吞吐量计算

以太网帧结构 帧大小的定义 以太网单个最大帧 6&#xff08;目的MAC地址&#xff09; 6&#xff08;源MAC地址&#xff09; 2&#xff08;帧类型&#xff09; 1500{IP数据包[IP头&#xff08;20&#xff09;DATA&#xff08;1480&#xff09;]} 4&#xff08;CRC校验&#xff…...

vue中install方法

1&#xff1a;语法 vue提供install可供我们开发新的插件及全局注册组件等 install方法第一个参数是vue的构造器&#xff0c;第二个参数是可选的选项对象 export default {install(Vue,option){组件指令混入挂载vue原型} }2&#xff1a;注册组件 一&#xff1a;注册单个组件 1…...

Flutter:文件读取—— video_player、chewie、image_picker、file_picker

前言 简单学习一下几个比较好用的文件读取库 video_player 简介 用于视频播放 官方文档 https://pub-web.flutter-io.cn/packages/video_player 安装 flutter pub add video_player加载网络视频 class _MyHomePageState extends State<MyHomePage> {// 控制器late…...

vim的使用

vim文本编辑器 vim介绍命令模式光标移动选中内容复制内容粘贴内容删除撤销/恢复字符转换 编辑模式末行模式保存/退出查找行号显示文件切换 扩展 vim介绍 vim是Linux自带的文本编辑器&#xff0c;具有命令模式、编辑模式、末行模式三种模式。 模式间的切换&#xff1a; 命令模…...

马氏杆法检查斜视

使用 检查水平向斜视时&#xff0c;使用水平向马氏杆检查;重直向斜视时&#xff0c;使用重直问马氏杆;检查旋转斜视时&#xff0c;使用双马氏杆. 检查水平向斜视 双眼屈光不正全矫 双眼同时打开&#xff0c;右眼前加水平向马氏杆&#xff0c;左眼前不加 双眼同时观察点光源&…...

Mac电脑怎么使用“磁盘工具”修复磁盘

我们可以使用“磁盘工具”的“急救”功能来查找和修复磁盘错误。 “磁盘工具”可以查找和修复与 Mac 磁盘的格式及目录结构有关的错误。使用 Mac 时&#xff0c;错误可能会导致意外行为&#xff0c;而重大错误甚至可能会导致 Mac 彻底无法启动。 继续之前&#xff0c;请确保您…...

c++画出分割图像,水平线和垂直线

1、pca 找到图像某个区域的垂直线&#xff0c;并画出来 // 1、 斑块的框 血管二值化图&#xff0c;pca 找到垂直血管壁的直线, 还是根据斑块找主轴方向吧// Step 1: 提取斑块左右范围内的血管像素点坐标&#xff0c;std::vector<cv::Point> points;for (int y 0; y <…...

Python 程序设计入门(015)—— enumerate() 函数的用法

Python 程序设计入门&#xff08;015&#xff09;—— enumerate() 函数的用法 目录 Python 程序设计入门&#xff08;015&#xff09;—— enumerate() 函数的用法一、enumerate() 函数的语法二、为可迭代对象创建索引三、将字符串、列表等转换为字典1、将字符串转换为字典2、…...

__dict__属性

__dict__ 是 Python 中的一个特殊属性&#xff0c;通常存在于大多数 Python 对象中&#xff0c;用于存储该对象的可变属性。 以下是关于 __dict__ 的一些关键点和详细信息&#xff1a; 存储属性&#xff1a;对于大多数自定义的 Python 对象&#xff0c;__dict__ 属性包含了这个…...

k8s之Pod控制器

目录 一、Pod控制器及其功用二、pod控制器的多种类型2.1 pod容器中的有状态和无状态的区别 三、Deployment 控制器四、SatefulSet 控制器4.1 StatefulSet由以下几个部分组成4.2 为什么要有headless&#xff1f;4.3 为什么要有volumeClaimTemplate&#xff1f;4.4 滚动更新4.5 扩…...

逆元(求乘法逆元的几种方法)

目录 逆元 加法逆元 乘法逆元 如何求 快速幂 扩展欧几里得 O(n)求1到n的乘法逆元 逆元 数学中&#xff0c;逆元素&#xff08;英语&#xff1a;Inverse element&#xff09;推广了加法中的加法逆元和乘法中的倒数。直观地说&#xff0c;它是一个可以取消另一给定元素运…...

没点本事,还真做不好数字化转型

数字化转型逐渐成为企业业务增长的利器 然而&#xff0c;在此过程中 企业最应该注重哪些&#xff1f; 效率&#xff1f;质量&#xff1f; 但还有一个至关重要的点不容忽视 那就是安全 有一家硬核企业通过技术与狠活 硬生生提升了应用安全性 保障了产业与数字化的安全融合…...

windows 10 远程桌面配置

1. 修改远程桌面端口&#xff08;3389&#xff09; 打开注册表&#xff08;winr&#xff09;, 输入regedit 找到配置项【计算机\HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Terminal Server\Wds\rdpwd\Tds\tcp】 &#xff0c; 可以通过搜索“Wds”快速定位。 修改端口配…...

OpenStreetMap 上基于A*搜索算法的C ++路线规划项目

引言 在现代的地理信息系统&#xff08;GIS&#xff09;中&#xff0c;路线规划是一个重要的组成部分。它涉及到从一个地点到另一个地点的最优路径的确定。在这篇文章中&#xff0c;我们将探讨如何在OpenStreetMap数据上实现一个基于A*搜索算法的C路线规划项目。 OpenStreetM…...

java实现随机生成验证码

import java.util.concurrent.ThreadLocalRandom;/* 生成验证码的工具 可动态配置验证码长度*/ public class CodeUtils {public static void main(String[] args) {//随机生成5个长度为4的验证码for (int i 0; i < 5; i) {System.out.println(CodeUtils.getCode(4));}for …...

Positive证书是什么?

Positive SSL是全球著名CA Sectigo的子品牌&#xff0c; 也是目前全球签发量最高的商业SSL证书。价格低&#xff0c;安全性高&#xff0c;在个人网站和中小型企业网站中拥有极高的占有率。 Positive SSL证书包括DV SSL&#xff0c; EV SSL&#xff0c;也是唯一支持IP地址加密的…...

vulnhub靶场-y0usef笔记

vulnhub靶场-y0usef笔记 信息收集 首先fscan找到目标机器ip http://192.168.167.70/ nmap扫描端口 Host is up (0.00029s latency). Not shown: 998 closed tcp ports (reset) PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 6.6.1p1 Ubuntu 2ubuntu2.13 (Ub…...

华为智选首款纯电轿跑“LUXEED”能大卖吗?

监制 | 何玺 排版 | 叶媛 华为智选纯电轿跑来袭&#xff01; 8月7日&#xff0c;华为常务董事余承东在社交媒体上发文&#xff0c;宣布华为智选即将推出首款“突破想象”的纯电轿跑车。 01 华为智选首款纯电轿跑来袭 余承东的发文引起了极大关注&#xff0c;在各大媒体的报…...

优化Blazor渲染逻辑的实践

在Blazor应用程序开发中,页面渲染逻辑的优化是提升用户体验的重要环节。特别是当页面包含多个条件渲染的组件时,如何高效地控制渲染流程成为了一个关键问题。本文将通过一个实际的案例,展示如何在Blazor中使用RenderFragment和return语句来优化页面渲染逻辑。 背景 假设我…...

Qwen2.5-VL底座+lychee-rerank-mm效果惊艳:批量图片智能打分可视化展示

Qwen2.5-VL底座lychee-rerank-mm效果惊艳&#xff1a;批量图片智能打分可视化展示 1. 项目简介 这是一个专门为RTX 4090显卡&#xff08;24G显存&#xff09;打造的智能图片排序系统。核心基于阿里通义千问Qwen2.5-VL多模态大模型&#xff0c;结合Lychee-rerank-mm专业重排序…...

Asian Beauty Z-Image Turbo商业应用:快速生成品牌宣传东方形象照

Asian Beauty Z-Image Turbo商业应用&#xff1a;快速生成品牌宣传东方形象照 大家好&#xff0c;今天我们来聊一个对品牌方、市场人员和内容创作者特别有吸引力的工具——Asian Beauty Z-Image Turbo。如果你正在为品牌宣传、社交媒体内容或营销活动寻找高质量的东方形象照&a…...

高效下载B站视频全攻略:Downkyi让你轻松管理视频资源

高效下载B站视频全攻略&#xff1a;Downkyi让你轻松管理视频资源 【免费下载链接】downkyi 哔哩下载姬downkyi&#xff0c;哔哩哔哩网站视频下载工具&#xff0c;支持批量下载&#xff0c;支持8K、HDR、杜比视界&#xff0c;提供工具箱&#xff08;音视频提取、去水印等&#x…...

如何快速实现jsTree上下文菜单:为树形节点添加智能右键操作功能

如何快速实现jsTree上下文菜单&#xff1a;为树形节点添加智能右键操作功能 【免费下载链接】jstree jquery tree plugin 项目地址: https://gitcode.com/gh_mirrors/js/jstree jsTree上下文菜单插件是jQuery树形插件中最实用的功能之一&#xff0c;它能让用户通过右键点…...

千问3.5-2B辅助MATLAB科学计算:算法实现与结果可视化脚本生成

千问3.5-2B辅助MATLAB科学计算&#xff1a;算法实现与结果可视化脚本生成 1. 科研计算的新助手 作为一名经常使用MATLAB的科研工作者&#xff0c;你是否遇到过这样的困扰&#xff1a;明明知道要解决什么数学问题&#xff0c;却卡在代码实现环节&#xff1f;或者花了大量时间调…...

读书笔记--赤裸裸的统计学阅读总结感悟

最近在做统计分析时&#xff0c;简要阅读了《赤裸裸的统计学》&#xff0c;该书通过幽默生动的案例剥去大数据的枯燥外衣&#xff0c;揭示了统计学在现代社会中的核心作用及潜在误区。系统讲解了描述统计学、相关系数、概率期望、中心极限定理、回归分析以及假设检验等经典统计…...

EmonLibCM:嵌入式电能监测连续采样库解析

1. EmonLibCM&#xff1a;面向嵌入式电能监测的连续采样库深度解析EmonLibCM&#xff08;Energy Monitoring Continuous Sampling Library&#xff09;是一个专为资源受限嵌入式平台设计的开源电能监测库&#xff0c;其核心目标是实现高精度、低开销、免中断依赖的交流电参数连…...

光谱特征选择实战:UVE算法原理、实现与避坑指南

1. UVE算法原理&#xff1a;噪声如何帮你筛选特征&#xff1f; 第一次听说用噪声来筛选特征时&#xff0c;我也觉得不可思议——噪声不是应该干扰数据分析吗&#xff1f;但UVE算法的精妙之处恰恰在于它把噪声变成了"标尺"。想象你在超市挑选苹果&#xff0c;如果闭着…...

人流后多久干净才算正常?行业洞察与科学修护指南

人工流产后&#xff0c;出血排净时间是判断身体恢复状态的核心指标&#xff0c;也是女性关注的首要问题。结合行业研究与临床实践&#xff0c;本文将深入解析人流后出血的正常范围、异常信号&#xff0c;同时结合行业修护标准&#xff0c;为女性提供科学、实用的恢复指引&#…...