指针

使用讯飞语音识别的空指针错误

為{幸葍}努か 提交于 2020-03-08 09:56:48
问题: 刚开始用讯飞写小Demo的时候比较快,基本上没有遇见什么错误, 主要是参考了这篇博客: https://blog.csdn.net/chenli_001/article/details/73603917 但是后面在项目里面集成的时候,一直显示空指针错误,一连好几天都没弄好。 java.lang.NullPointerException: Attempt to invoke virtual method ‘boolean com.iflytek.cloud.SpeechSynthesizer .setParameter(java.lang.String, java.lang.String)’ on a null object reference 原因: 空指针也就是说使用的指针为null,所以空指针错误就是说使用这个指针调用方法相当于用null来调用方法,所以就要从这个指针入手解决。参考: https://zhidao.baidu.com/question/692912236600019684.html 解决(几种方法都可以试一下): 1.检查时候将官网sdk中的demo的libs下的所有文件全部复制到项目的libs和jniLibs目录下,同时libs下的jar包要右键add添加 2.检查APPID和项目中需要的sdk(注意这个sdk是和每个APPID匹配的

C++标准转换运算符reinterpret_cast

*爱你&永不变心* 提交于 2020-03-08 08:34:51
C++标准转换运算符reinterpret_cast 来源 https://www.cnblogs.com/codingmengmeng/p/7650885.html reinterpret_cast<new_type> (expression) reinterpret_cast运算符是用来处理无关类型之间的转换;它会产生一个新的值,这个值会有与原始参数(expression)有完全相同的比特位。 什么是无关类型?我没有弄清楚,没有找到好的文档来说明类型之间到底都有些什么关系(除了类的继承以外)。后半句倒是看出了reinterpret_cast的字面意思:重新解释(类型的比特位)。我们真的可以随意将一个类型值的比特位交给另一个类型作为它的值吗?其实不然。 IBM的C++指南里倒是明确告诉了我们reinterpret_cast可以,或者说应该在什么地方用来转换运算符: 从指针类型到一个足够大的整数类型 从整数类型或者枚举类型到指针类型 从一个指向函数的指针到另一个不同类型的指向函数的指针 从一个指向对象的指针到另一个不同类型的指向对象的指针 从一个指向类函数成员的指针到另一个指向不同类型的函数成员的指针 从一个指向类数据成员的指针到另一个指向不同类型的数据成员的指针 不过我在Xcode中测试了一下,事实上reinterpret_cast的使用并不局限在上边所说的几项的

C++面试题

时光怂恿深爱的人放手 提交于 2020-03-08 08:06:32
语言基础类 1. 指针和引用的区别? (1)指针有自己的一块空间,而引用只是一个别名;  (2)使用 sizeof 看一个指针的大小为 4 字节(32位,如果要是64位的话指针为8字节),而引用则是被引用对象的大小。 (3) 引用必须在定义时被初始化,指针不必; (4)不存在指向空值的引用,但存在指向空值的指针。 2.static和 const的用法,(能说出越多越好)(重点) 首先说说const的用法(绝对不能说是常数) 1.限定变量为不可修改。 2.限定成员函数不可以修改任何数据成员。 3.使用const关键字修饰的变量,一定要对变量进行初始化 下面的声明都是什么意思? const int a; a是一个常整型数 int const a; a是一个常整型数 const int *a; a是一个指向常整型数的指针,整型数是不可修改的,但指针可以 int * const a; a为指向整型数的常指针,指针指向的整型数可以修改,但指针是不可修改的 int const * a const; a是一个指向常整型数的常指针,指针指向的整型数是不可修改的,同时指针也是不可修改的 通过给优化器一些附加的信息,使用关键字const也许能产生更紧凑的代码。 合理地使用关键字const可以使编译器很自然地保护那些不希望被改变的参数,防止其被无意的代码修改。简而言之,这样可以减少bug的出现。

halcon算子翻译——gen_image1_extern

心不动则不痛 提交于 2020-03-08 06:53:26
名称 gen_image1_extern - 使用带存储管理从像素上的指针创建图像。 用法 gen_image1_extern( : Image : Type, Width, Height, PixelPointer, ClearProc : ) 描述   算子gen_image1_extern创建一个大小为Width*Height的图像。 PixelPointer中的像素按线顺序存储。 给定像素(PixelPointer)的类型必须对应于Type(请参阅gen_image_const以获取更详细的图像类型描述)。 请注意,如何传递一个指针值取决于所使用的算子和编程环境。 确保传递存储图像数据的实际内存地址,而不是指针变量的地址。 必须注意不要在64位体系结构上截断64位指针。   新图像的内存不是由HALCON新分配的,与gen_image1相反,因此也不被复制。 这意味着PixelPointer指向的内存空间必须通过删除对象Image来释放。 这是由调用者提供的程序ClearProc完成的。 此函数必须具有以下模式:    void ClearProc(void* ptr);   并在删除图像时使用__cdecl调用约定进行调用。 如果内存不被释放(在图像采集卡或静态存储器的情况下),可以传递“无中继”或NULL指针的函数。 类似于参数PixelPointer

CAD改变图形对象属性

早过忘川 提交于 2020-03-08 06:14:23
所有对象都一个唯一的标识id和句柄,都是用来标识对象,知道对象的Id或句柄,就能找到对象并修改属性。id是只在当前内存中唯一,下次再打开id就会发生变化,句柄会随图纸保存,并会一直不变。 对象Id,指针,句柄三者之前的转换关系: 从 ID 到对象指针: 通过Mx::mcdbOpenObject 打开对象,或使用智能指针打开, McDbObjectPointer。 从对象指针到 ID: 所有的数据库对象都继承自McDbObject,调用McDbObject::objectId()返回对象的ID。 从句柄到 ID:使用McDbDatabase::getAcDbObjectId 函数。 从 ID 到句柄:使用McDbObjectId::handle 函数。 从指针到句柄:使用 McDbObject::getAcDbHandle 函数。 修改对象颜色 上一节中:函数McDbObjectId CreateLine1(McGePoint3d pt1,McGePoint3d pt2)会返回新绘制的对象id。 // ------------------------------------------------------------------------- // Summary: // 改变实体颜色 // Parameters: // id - 实体的id // color - 实体的新颜色

SSM单元测试报空指针

耗尽温柔 提交于 2020-03-08 00:17:02
ssm单元测试报空指针解决 1.数据库数据为空,没有判断 2.数据库有数据,配置文件也正常如下面: 调试时候一直报空指针,查看了配置文件还有web.xml都是正确的,最后才发现忘记了加@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations =“classpath:application.xml” ) 这两个注解忘记加了 这个注解是Spring测试的支持。所以以后要仔细啊! (新手,不喜勿喷。谢谢大佬留情) 来源: CSDN 作者: Lee_Xcsdn 链接: https://blog.csdn.net/Lee_XCSDN/article/details/104719414

SAS学习笔记5

蓝咒 提交于 2020-03-07 21:41:51
今天详细说说指针。 相对于其他的编程语言而言,SAS在读取数据时也是通过SAS的指针控制符来控制读取数据的。指针控制符分为行指针和列指针,下面我们结合例子来说这两种指针。 1)列指针控制符 语法格式:@n 此处的@是列指针标志符号,n是整数类型,指明列的开始位置。 %let lj='d:\test\xy.txt'; /*外部文件路径*/ filename xy "(&lj)"; /*为路径命名*/ DATA area; infile xy; /*读文件*/ input @1 bh $3. /*列指针控制读取*/ @4 prov $17. @21 zone $4. ; RUN; PROC print; RUN; 结果输出: Obs bh prov zone 1 001 北京市西城区 1000 2 002 山东青岛 0532 3 003 新疆石河子 0023 4 004 江苏省南京市 3562 5 005 广东省广州市 9876 6 006 陕西省西安市 6789 程序解读: 对外部文件进行分析,INPUT语句定义读取位置和变量, @1表示变量bh从第一列开始读取数据, $3.指明变量bh为字符类型,长度为3,读取3个字符就结束。 其他变量的定义形式与bh变量类似。 2)列控制符号 语法格式: n1-n2 n1表示列开始的位置,正整数值。 n2表示列结束的位置,正整数值。 %let

C++引用的实现

回眸只為那壹抹淺笑 提交于 2020-03-07 19:13:30
当我学习C++引用时,听到的第一句话是“引用是变量的别名,不像指针一样需要占用内存空间”。然而学到深处,发现此话并不完全正确。 本文主要介绍我如何通过实验来了解到C++引用的实现,其实 引用的内部就是指针 。当然这也于编译器有关,所以这里需要提及一下测试所用的编译器及环境。 测试环境是MinGW的g++ 8.1.0,64位编译器,64位的机子。所以指针的大小是8个字节,即64个bit。(注:因为目的是测试,所以测试时并没有处理对new操作符所产生对象的回收) 首先我写出了如下代码,试图通过指针偏移来获取有关引用的信息: #include <iostream> #include <string> using namespace std; int main() { int64_t x; string& str = *new string(); int64_t y; str = "123"; // 对引用做一次操作,避免编译器把变量优化掉 cout << &x << endl; cout << &y << endl; return 0; } 然而,这个程序的输出如下: 0x61fe00 0x61fdf8 难道引用真的不占内存?编译器真的很聪明,可能优化掉了吧;经过一系列尝试,我写出了另外一段代码: #include <iostream> #include <string> using

JVM深入解析

有些话、适合烂在心里 提交于 2020-03-07 14:37:23
Java运行时数据区: Java虚拟机在执行Java程序的过程中会将其管理的内存划分为若干个不同的数据区域,这些区域有各自的用途、创建和销毁的时间,有些区域随虚拟机进程的启动而存在,有些区域则是依赖用户线程的启动和结束来建立和销毁。Java虚拟机所管理的内存包括以下几个运行时数据区域,如图: 1、程序计数器:指向当前线程正在执行的字节码指令。线程私有的。 2、虚拟机栈:虚拟机栈是Java执行方法的内存模型。每个方法被执行的时候,都会创建一个栈帧,把栈帧压人栈,当方法正常返回或者抛出未捕获的异常时,栈帧就会出栈。 (1)栈帧:栈帧存储方法的相关信息,包含局部变量数表、返回值、操作数栈、动态链接 a、局部变量表:包含了方法执行过程中的所有变量。局部变量数组所需要的空间在编译期间完成分配,在方法运行期间不会改变局部变量数组的大小。 b、返回值:如果有返回值的话,压入调用者栈帧中的操作数栈中,并且把PC的值指向 方法调用指令 后面的一条指令地址。 c、操作数栈:操作变量的内存模型。操作数栈的最大深度在编译的时候已经确定(写入方法区code属性的max_stacks项中)。操作数栈的的元素可以是任意Java类型,包括long和double,32位数据占用栈空间为1,64位数据占用2。方法刚开始执行的时候,栈是空的,当方法执行过程中,各种字节码指令往栈中存取数据。 d、动态链接

C++之指针、引用、数组、堆区栈区

此生再无相见时 提交于 2020-03-07 12:41:28
指针 指针(pointer)是一个值为内存地址的变量(或数据对象) 基本用法 数据类型 * 指针变量名 如 int * ptr_num 注意: Int* p 写法偏向地址 P是一个地址变量 表示一个十六进制地址 Int *p偏向值 *p是一个整型变量 能够表示一个整型值 给指针赋值只能使用&符号 空指针(null pointer)空指针不指向任何对象,在试图使用一个指针之前首先检查是否为空 Int *ptr1 = nullptr; 如果用null需要包含cstdlib Void 指针 一种特殊的指针类型 可以存放任意对象的地址 注意: void 指针存放一个内存地址,地址指向的内容是什么类1、型不能确定 2、Void 类型指针一般用来:拿来和别的指针比较,作为函数的输入和输出;赋值给另一个void 指针 指针小结: 指针同样是一个变量,只不过该变量中存储的是另一个对象的内存地址 如果一个变量存储另一个对象 的地址,则称该变量指向这个对象 指针变量可以赋值 指针的指向在程序执行中可以改变 指针P在执行中某时刻指向变量x在另一时刻可以指向y 注意: 指针命名规则和其他变量命名规则一样 指针不能与现有变量重名 应为指针指定一个地址后才能在语句中使用指针 引用 为对象起了另外一个名字(引用即别名) Int int_value = 1024; //refValue指向int_value