C++中栈溢出的解决办法有哪些?
1)、增加栈内存的数目;如果是不超过栈大小但是分配值小的,就增大分配的大小
2)、使用堆内存;具体实现由很多种方法可以直接把数组定义改成指针,然后动态申请内存;也可以把局部变量变成全局变量,一个偷懒的办法是直接在定义前边加个static,直接变成静态变量(实质就是全局变量)
C++中造成栈溢出的原因有哪些?
1)函数调用层次过深,每调用一次,函数的参数、局部变量等信息就压一次栈2)局部变量体积太大。
C++中有些情况会导致内存泄漏?
1)类的构造函数和析构函数中new和delete没有配套2)在释放对象数组时没有使用delete[],使用了delete3)没有将基类的析构函数定义为虚函数,当基类指针指向子类对象时,如果基类的析构函数不是virtual,那么子类的析构函数将不会被调用,子类的资源没有正确释放,因此造成内存泄露4)没有正确的清楚嵌套的对象指针。
C++中有哪些操作会产生野指针?
1)指针变量没有被初始化 2)指针指向的内存被释放了,但是指针没有置NULL 3)指针超过了变量了的作用范围,比如b[10],指针b+11
C++中什么是野指针?
野指针不是NULL指针,是未初始化或者未清零的指针,它指向的内存地址不是程序员所期望的,可能指向了受限的内存。
C++中用引用作为返回值有什么限制?
1)不能返回局部变量的引用。因为函数返回以后局部变量就会被销毁2)不能返回函数内部new分配的内存的引用。虽然不存在局部变量的被动销毁问题,可对于这种情况(返回函数内部new分配内存的引用),又面临其它尴尬局面。例如,被函数返回的引用只是作为一 个临时变量出现,而没有被赋予一个实际的变量,那么这个引用所指向的空间(由new分配)就无法释放,造成memory leak3)可以返回类成员的引用,但是最好是const。因为如果其他对象可以获得该属性的非常量的引用,那么对该属性的单纯赋值就会破坏业务规则的完整性。
C++中什么是引用传递?
形参相当于是实参的“别名”,对形参的操作其实就是对实参的操作,在引用传递过程中,被调函数的形式参数虽然也作为局部变量在栈中开辟了内存空间,但是这时存放的是由主调函数放进来的实参变量的地址。被调函数对形参的任何操作都被处理成间接寻址,即通过栈中存放的地址访问主调函数中的实参变量。正因为如此,被调函数对形参做的任何操作都影响了主调函数中的实参变量。
C++中什么是指针传递?
形参为指向实参地址的指针,当对形参的指向操作时,就相当于对实参本身进行的操作
C++中什么是值传递?
形参是实参的拷贝,改变形参的值并不会影响外部实参的值。从被调用函数的角度来说,值传递是单向的(实参->形参),参数的值只能传入,不能传出。当函数内部需要修改参数,并且不希望这个改变影响调用者时,采用值传递。
C++中引用作为函数参数以及返回值有什么好处?
1)在函数内部可以对此参数进行修改2)提高函数调用和运行的效率(所以没有了传值和生成副本的时间和空间消耗)。