memcpy

Cast void* to memcpy to get a float value

戏子无情 提交于 2020-05-17 05:58:07
问题 Here is an example of the problem I'm trying to solve I get a buffer from the microphone and try and process it content. as kindly guided from this question Im trying to convert a char* to float* the logic I declare a vector to hold my desired float then resize it to that of ArBuffer() and then copy to the vector. ArBuffer() is a void gonna have to cast this to memcpy? #include "Lib_api.h" #include <alsa/asoundlib.h> #include <stdio.h> #include "audiorecorder.h" #include "Globals.h" #include

内核栈回溯原理学习应用

独自空忆成欢 提交于 2020-04-08 08:45:36
  这篇主要是杭州操作系统大会前辈的文档进行学习,因为文档公开了故而总结学习一下,如若其中有侵权的地方,请及时联系我,谢谢 ........................................................................................................................................................................................................................... 问题:     一台客户现场机器,运行一周左右偶然发生一次应用段错误或者double free问题,cpu可能是arm、mips、x86等架构,有什么好的方法捕捉异常日志? 困难点:   1. 研发环境常使用gdb+coredump技术解决此类问题,客户现场等非研发环境的偶现应用异常问题,不方便使用,操作起来有一定难度   2. 不同架构(arm32、arm64、mips、x86),不同版本C库和gdb,栈回溯效果差异很大。PC ubuntu系统测试,glibc 2.15,发生应用double free,直接打印栈回溯信息,其他架构的CPU上测试没有这个功能。arm64架构的某款CPU上测试

【视频开发】ONVIF、RTSP/RTP、FFMPEG的开发实录

笑着哭i 提交于 2020-03-29 14:01:59
ONVIF、RTSP/RTP、FFMPEG的开发实录 前言 本文从零基础一步步实现ONVIF协议、RTSP/RTP协议获取IPC实时视频流、FFMPEG解码。开发环境为WIN7 32位 + VS2010。 最终成功获取浩云、海康、大华的IPC实时视频流。 如果要了解本文更多细节,或者用本文作设计指导,那最好把文中提到的连接都打开,与本文对照着看。 前期准备 1.准备一个ONVIF服务器 既然开发的是客户端,那必需要有服务端了。我这里大把的IPC,好几个品牌的,就随便拿了一个。 如果没有IPC,倒是可以用 VLC media player 搭建一下。或者其他播放器也可以。这个网上很多资料。 2.准备一个ONVIF 测试工具 这个工具在ONVIF的官网上可以找到:ONVIF Device Test Tool 。 3.准备解码器相关资料及资源 收到视频流后,需要解码。可以用ffmpeg,也可以用其他解码库。这个是后话了,等ONVIF搞定之后再搞解码也不迟。推荐链接: http://wenku.baidu.com/view/f8c94355c281e53a5802ffe4.html?re=view (Windows下使用MinGW编译ffmpeg与x265) 4.准备资料 ONVIF协议书必看,ONVIF官网自然是不能少的。其他资料推荐几个链接: http://www.cuplayer

memcpy 和 memmove

牧云@^-^@ 提交于 2020-03-26 14:43:25
在发生overlap的情况下,memcpy在不同的平台是有差别的 这是例子 #include "stdio.h" char str1[9] = "aabbccdd"; int main( void ) { printf("The string: %s\n", str1); memcpy(str1 + 2, str1, 6); printf("New string: %s\n", str1); strcpy(str1, "aabbccdd"); // reset string printf("The string: %s\n", str1); memmove(str1 + 2, str1, 6); printf("New string: %s\n", str1); } 在不同的Target上,memcpy的行为不同,memmove是一致的 所以memcpy的时候要注意这个问题 gcc on Ubuntu: The string: aabbccdd New string: aaaaaabb The string: aabbccdd New string: aaaabbcc Some ARM Target The string: aabbccdd New string: aaaabbbb The string: aabbccdd New string: aaaabbcc 来源:

C语言 malloc()、memcpy()、free()等

▼魔方 西西 提交于 2020-03-10 08:54:06
1、malloc()函数: void *malloc(unsigned int num_bytes); 头文件:#include <malloc.h> 或 #include <alloc.h> (注意:alloc.h 与 malloc.h 的内容是完全一致的。) 功能:分配长度为num_bytes字节的内存块 说明:如果分配成功则返回指向被分配内存的指针, 否则返回空指针NULL。 当内存不再使用时,应使用 free() 函数将内存块释放。 malloc 只管分配内存,并不能对所得的内存进行初始化,所以得到的一片新内存中,其值将是随机的,申请的内存是连续的 。 返回类型是 void* 类型。void* 表示未确定类型的指针。C,C++规定,void* 类型可以强制转换为任何其它类型的指针。 malloc 函数返回的是 void * 类型,C++:p = malloc (sizeof(int)); 则程序无法通过编译,报错:“不能将 void* 赋值给 int * 类型变量”。 所以必须通过 (int *) 来将强制转换 。 C是能通过编译,不会报错。 规范的程序: (检查返回值是否不是NULL,不检查若申请分配失败便造成 内存泄漏 ) type *p; if(NULL == (p = (type*)malloc(sizeof(type)))) /*请使用if来判断,这是有必要的*/

C语言 memcpy二维数组的复制

六月ゝ 毕业季﹏ 提交于 2020-03-07 09:10:25
int main(void) { int src[][3]={{1,2,3},{4,5,6},{7,8,9},{1,2,3},{4,5,6},{7,8,9}}; int des[6][3]={0,0};//要小心,行数固定 printf("%d",sizeof(src)); print(src,6,3); memcpy(des,src,sizeof(src)); print(des,6,3); return 1; } https://www.cnblogs.com/shuqingstudy/p/4733307.html 来源: CSDN 作者: enjoyfate 链接: https://blog.csdn.net/u014683488/article/details/104708917

B+树

孤街浪徒 提交于 2020-02-29 15:46:34
#ifndef __GOODSTREE_H__ #define __GOODSTREE_H__ #define M 200 // 树的枝数。 #define MAX_NUM 60 // 树的深度。 typedef struct _head{ long root; long head; long tail; long number; }Head; template <class T> class TreeNode{ public: int n; long a[M+1]; T key[M]; long prev; long next; BOOL IsLeaf; }; ////////////////////////////////////////////////////////////////// // CGoodsTree 是M路B+树. template <class T> class CGoodsTree{ public: CGoodsTree(){ m_head.root = -1; m_IsUsed = 0;}; ~CGoodsTree(){}; public: BOOL Open(CString& FileName); void Close(); BOOL InsertNode(T& x); BOOL ChangeNode(T& x); BOOL DeleteNode(T&

C语言string字符串函数memset()、memchr()、memcpy()\strcat()、strncat()、strchr()

旧巷老猫 提交于 2020-02-28 05:29:55
1.memchr() 原型:void memchr(const void str, int c, size_t n) 作用:在 str的前n个字节中寻找c 返回值:一个指向匹配字节的指针 否则空指针(第一个匹配的值的指针) 2.strchr() 原型:char strchr(const char*s,int c) 返回值:匹配字节的指针 区别:memchr检测的是一段内存,strchr检测的是一个字符串 如果一段内存中有0x0的话,不能用strchr去查找的,因为遇到0x0会当作字符串的结束符停止。而mem是根据后面的n停止。 # include <stdio.h> # include <string.h> int main ( ) { char * p1 , * p2 ; char ch [ ] = { "Nthing is impossible,Believe yourself!" } ; p1 = ( char * ) memchr ( ch , 'i' , strlen ( ch ) ) ; p2 = strchr ( ch , 'i' ) ; printf ( "Memchr()搜索i:%s\n strhr()搜索i:%s" , p1 , p2 ) ; return 0 ; } 运行结果: Memchr()搜索i:ing is impossible,Believe

linux系统中使用socket直接发送ARP数据

折月煮酒 提交于 2020-02-24 14:42:14
这个重点是如这样创建socket: sock_send = socket ( PF_PACKET , SOCK_PACKET , htons ( ETH_P_ARP) ) ; 其后所有收发的数据都是原始的网络数据包。 代码如下:在X86和ARM平台上都测试通过。调用arp_scaner_init之后 ,调用send_arp来发送ARP数据包,thread_read_arp中就会收到对端的反馈,并将其保存。 在此非常感谢其他同仁的分享,使我学会了这个用法。 #include <unistd.h> #include <errno.h> #include <netdb.h> #include <signal.h> #include <sys/socket.h> #include <sys/poll.h> #include <sys/ioctl.h> #include <netinet/if_ether.h> #include <net/if_arp.h> #include <netinet/udp.h> #include <netinet/ip.h> #include <stdio.h> #include <stdarg.h> #include <net/if.h> #include <arpa/inet.h> #include <string.h> #include "adapter