每日一问之C/C++
文章平均质量分 76
C/C++基本语言面试常见问题
能吃怎么了
新手小白
展开
-
6、内存泄漏和内存溢出有什么区别?
内存溢出 (out of memory),指程序申请内存时,没有足够的内存供申请者使用。内存溢出就是你要的内存空间超过了系统实际分配给你的空间,此时系统相当于没法满足你的需求,就会报内存溢出的错误。1、内存中加载的数据量过于庞大,如一次从数据库取出过多数据2、集合类中有对对象的引用,使用完后未清空,使得不能回收3、代码中存在死循环或循环产生过多重复的对象实体4、使用的第三方软件中的 BUG5、启动参数内存值设定的过小一个盘子用尽各种方法只能装4个果子,你装了5个,结果掉倒地上不能吃了。原创 2023-05-12 20:17:46 · 92 阅读 · 0 评论 -
5、C和C++有什么区别?适用场景?
(1)因此C++语言中有类和对象以及继承多态这样的OOP语言必备的内容,此外C++支持模板,运算符重载,异常处理机制,以及一个非常强大的C++标准模板库STL,另外一个Boost库现在也归属C++标准库,提供了很多强大的功能。(2)既然C++是面向对象的OOP语言,因此它还有非常强大的设计模式,比如单例,工厂,观察者模式等等,这些在C语言当中都是不支持的。(3)C语言通过malloc和free来进行堆内存的分配和释放,而C++是通过new和delete来管理堆内存的。原创 2023-05-12 19:56:47 · 639 阅读 · 0 评论 -
4、C++中的函数重载
是指派生类中存在重新定义的函数。其函数名,参数列表,返回值类型,所有都必须同基类中被重写的函数一致。只有函数体不同(花括号内),派生类调用时会调用派生类的重写函数,不会调用被重写函数。重写的基类中被重写的函数必须有virtual修饰。//输出B。原创 2023-05-10 14:24:24 · 138 阅读 · 0 评论 -
3、C/C++中的extern
而且编译阶段,外面是找不到该函数的,但是不报错。它通常是根据参数来区分具体的调用,那换句话说,CPP编译器会将参数类型和函数名字连接在一起,这样编译器就可以根据符号名字的参数进行链接。2、extern可以置于变量或者函数前, extern标识的变量或函数声明定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。语言在编译的时候为了解决函数的多态问题,会将函数名和参数联合起来生成一个中间的函数名称,而。”进行链接指定,这告诉编译器,请保持我的名称,不要给我生成用于链接的中间函数名。原创 2023-05-10 13:23:52 · 216 阅读 · 0 评论 -
2、strcpy、strncpy、strlcpy和memcpy
它最大的问题是strcpy并不检查目的缓冲区的大小边界,而是将源字符串逐一的全部赋值给目的字符串地址起始的一块连续的内存空间,同时加上字符串终止符。当n<=strlen(s1)时,s2是没有结束符“\0”的,那么用s2的时候没有结束位置,后续对于字符串的操作可能会造成内存的非法访问,因此为了避免发生这种错误,可以手动添加’\0’。在已知dest缓冲区大小并不会造成缓冲区溢出前提下,将src地址开始的字符串复制到以dest开始的地址空间,src字符串的大小。操作成功,返回s2,否则返回NULL。原创 2023-05-10 13:19:33 · 750 阅读 · 0 评论 -
1、C++中的 new 与 delete
1、new 分配内存按照数据类型进行分配,无需指定空间的大小,编译器会自行计算;malloc 分配内存按照指定的大小分配,需要显式的计算;2、new/delete 返回的是指定对象的指针,而 malloc/free 返回的是 void类型的指针,因此 malloc 的返回值一般都需要进行类型转化。3、new的底层通常使用malloc,然后调用构造函数,最后返回自定义类型的指针。delete先调用析构函数,底层通常是free。4、new 是一个操作符可以重载,malloc 是一个库函数。原创 2023-05-10 13:09:20 · 83 阅读 · 0 评论