C++ 八股(1)

C語言中strcpy為什么不安全?如何解決?

主要原因是缺乏對輸入長度的邊界檢查,容易導致緩沖區溢出漏洞。

解決:可以使用strncpy函數替代,或者在程序最頂端加入代碼段

#define  _CRT_SECURE_NO_WARNINGS

緩沖區溢出

緩沖區通常指的是用于存儲數據的連續內存塊。在輸入輸出操作中,緩沖區被用來臨時存儲數據,以便進行讀取或寫入操作。

緩沖區溢出(Buffer Overflow)是指當往一個緩沖區寫入超過其容量的數據時,導致數據溢出到其他內存區域,造成程序運行時的問題。這種情況通常發生在寫入數據時緩沖區的大小不足以容納所寫入的數據量

緩沖區溢出可能會導致以下問題:

  • 覆蓋數據:超出緩沖區邊界的數據可能會覆蓋其他數據,導致數據的丟失或損壞。
  • 程序崩潰:緩沖區溢出可能引發程序崩潰或異常終止,因為溢出的數據可能會影響程序的控制流和運行狀態。
  • 安全漏洞:惡意攻擊者可以利用緩沖區溢出漏洞執行惡意代碼,例如注入惡意指令或覆蓋函數返回地址。

C++容器不是線程安全的,怎么解決?

解決非線程安全容器(如map vector)的方法:同步

  • 互斥鎖實現互斥,即一個共享資源,同時最多只能有一個線程訪問;
  • 互斥鎖 & 條件變量,實現多線程同步;
  • 互斥鎖 & 信號量,實現多線程同步;
  • 讀寫鎖,互斥鎖的升級版本。讀的部分,多線程可以并行訪問;寫的部分,同時最多只能有一個線程訪問。
  • 可以通過固定vector的大小,避免動態擴容(無push_back)來做到 lock-free

互斥不一定同步,同步包含互斥

什么是線程安全容器

線程安全容器是可以支持在多個線程并發訪問的STL容器。在多線程程序中使用線程安全容器可以保證數據操作的正確性和安全性。C++ STL庫提供了一些線程安全容器(適配器),包括std::stackstd::queue,它們都是基于順序容器實現的。這些容器提供了多個線程的并發訪問功能。

為什么需要線程安全容器

在并發環境中,多個線程可能同時訪問同一資源。對于非線程安全的容器,在多線程的情況下容易出現數據競爭、死鎖等問題。線程安全容器可以避免這種問題的發生,保證程序的正確性。

讀寫鎖和互斥鎖有什么區別?

讀寫鎖讀的時候會加鎖嗎?

簡述讀寫鎖實現時的二次加鎖檢測,了解源碼

delete沒加[]會報錯嗎?

delete 釋放new分配的單個對象指針指向的內存
delete[] 釋放new分配的對象數組指針指向的內存

(1). 針對簡單類型 使用new分配后的不管是數組還是非數組形式內存空間用兩種方式均可 如:

int *a = new int[10];
delete a;
delete [] a;

此種情況中的釋放效果相同,原因在于:分配簡單類型內存時,內存大小已經確定,系統可以記憶并且進行管理,在析構時,系統并不會調用析構函數,它直接通過指針可以獲取實際分配的內存空間,哪怕是一個數組內存空間(在分配過程中 系統會記錄分配內存的大小等信息,此信息保存在結構體_CrtMemBlockHeader中,具體情況可參看VC安裝目錄下CRT\SRC\DBGDEL.cpp

(2). 針對類Class,兩種方式體現出具體差異?
當你通過下列方式分配一個類對象數組:

class A{
private:char *m_cBuffer;int m_nLen;
public:A(){ m_cBuffer = new char[m_nLen]; }~A() { delete [] m_cBuffer; }
};A *a = new A[10];delete a; ? ? ? ? //僅釋放了a指針指向的全部內存空間 //但是只調用了a[0]對象的析構函數 剩下的從a[1]到a[9]這9個用戶//自行分配的m_cBuffer對應內存空間將不能釋放 從而造成內存泄漏delete [] a; ? ? ?//調用使用類對象的析構函數釋放用戶自己分配內存空間并且//釋放了a指針指向的全部內存空間

所以總結下就是,如果ptr代表一個用new申請的內存返回的內存空間地址,即所謂的指針,那么:
delete ? ptr ? 代表用來釋放內存,且只用來釋放ptr指向的內存。?
delete[] ? rg ? 用來釋放rg指向的內存,!!還逐一調用數組中每個對象的destructor!!
對于像int/char/long/int*/struct等等簡單數據類型,由于對象沒有destructor,所以用delete 和delete [] 是一樣的!但是如果是C++對象數組就不同了!

vector和list的區別

vector 擁有一塊連續的內存,因此支持隨機訪問,如果需要高效率的訪問,而不在乎插入和刪除的效率,使用vector

list擁有一段不連續的內存空間,如果需要高效率的插入和刪除,而不關心訪問效率,使用list

C++程序生成可執行程序的流程

預編譯-編譯-匯編-鏈接

C++遇到庫不存在時可以編譯嗎?

缺少動態庫,可執行文件不能運行,但能通過編譯

虛函數表實現思路

對于虛函數表來說,在編譯的過程中編譯器就為含有虛函數的類創建了虛函數表,并且編譯器會在構造函數中插入一段代碼,這段代碼用來給虛函數指針賦值。因此虛函數表是在編譯的過程中創建

?對于虛函數表指針來說,由于虛函數表指針是基于對象的,所以對象在實例化的時候,虛函數表指針就會創建,所以是在運行時創建。由于在實例化對象的時候會調用到構造函數,所以就會執行虛函數表指針的賦值代碼,從而將虛函數表的地址賦值給虛函數表指針。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/42936.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/42936.shtml
英文地址,請注明出處:http://en.pswp.cn/web/42936.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

javascript高級部分筆記

javascript高級部分 Function方法 與 函數式編程 call 語法:call([thisObj[,arg1[, arg2[, [,.argN]]]]]) 定義:調用一個對象的一個方法,以另一個對象替換當前對象。 說明:call 方法可以用來代替另一個對象調用一個方法。cal…

MySQL運維實戰之ProxySQL(9.5)proxysql和MySQL Group Replication配合使用

作者:俊達 如果后端MySQL使用了Group Replication,可通過配置mysql_group_replication_hostgroups表來實現高可用 1 mysql_group_replication_hostgroups 字段描述writer_hostgroup寫hostgroup。read_only和super_read_only OFF的節點。backup_writer…

Vue3 pdf.js將二進制文件流轉成pdf預覽

好久沒寫東西,19年之前寫過一篇Vue2將pdf二進制文件流轉換成pdf文件,如果Vue2換成Vue3了,順帶來一篇文章,pdf.js這個東西用來解決內網pdf預覽,是個不錯的選擇。 首先去pdfjs官網,下載需要的文件 然后將下載…

第4章 IT服務規劃設計

第4章 IT服務規劃設計 4.1 概述 規劃設計處于整個IT服務生命周期中的前端,可以幫助IT服務供方了解客戶的需求,并對其進行全面的需求分析,然后通過對服務要素(包括人員、資源、技術和過程)、服務模式和服務方案的具體…

OpenHarmony4.x 系統模擬器環境

先下載源碼和編譯程序: 首先查看 OpenHarmony4.1源碼下載、編譯,生成OHOS_Image可執行文件的最簡易流程 準備在QEMU模擬器中運行ARM Cortex-M4的輕型開源鴻蒙系統 官方支持的開發板和模擬器種類-編譯形態整體說明OpenAtom OpenHarmony 已支持的示例工…

ArduPilot開源代碼之AP_MSP

ArduPilot開源代碼之AP_MSP 1. 源由2. Library設計2.1 啟動代碼2.2 支持特性2.3 MSP DisplayPort v.s. DJI FPV OSD 3. 重要例程3.1 AP_MSP::init3.2 AP_MSP::loop3.3 AP_MSP::init_backend 4. 實例理解5. 總結6. 參考資料 1. 源由 AP_MSP是處理MSP協議格式的報文數據應用類。…

反向業務判斷邏輯

業務功能需求: 根據id扣減用戶余額 包括:判斷用戶狀態是否正常判斷用戶余額是否充足 正向邏輯: 判斷用戶為正常下,判斷用戶余額充足,進行余額扣減; 》正向邏輯,多重嵌套,代碼不美觀…

??一文帶你入門【NestJS】

??引言 在現代Web開發領域,框架和技術的迭代速度令人咋舌。其中,NestJS作為一款基于Node.js的后端框架,以其卓越的設計理念和強大的功能集,迅速吸引了眾多開發者的眼球。本文將帶你深入了解NestJS的起源、發展,以及…

SpringIOC原理

SpringIOC原理 1.概念 Spring通過一個配置文件描述Bean及Bean之間的依賴關系,利用Java語言的反射功能實例化Bean并建立Bean之間的依賴關系。Spring的IOC容器在完成這些底層工作的基礎上,還提供了Bean實例緩存、生命周期管理、Bean實例代理、事件發布、…

AI提示詞:AI輔導「數學作業」

輔導孩子作業對許多家長來說可能是一件頭疼的事,但這部分工作可以在一定程度上交給AI來完成。 打開ChatGPT4,輸入以下內容: # Role 數學輔導專家## Profile - author: 姜小塵 - version: 02 - LLM: Kimi - language: 中文 - description: 專門為小學生…

加密算法詳解:對稱加密、非對稱加密、Hash算法

對稱加密、非對稱加密和哈希算法是信息安全中的三種主要加密技術,它們各自有不同的特點和用途: 對稱加密(Symmetric Encryption) 工作原理:使用相同的密鑰進行加密和解密。速度:通常非常快,適…

Elasticsearch:Node.js ECS 日志記錄 - Morgan

這是之前系列文章: Elasticsearch:Node.js ECS 日志記錄 - Pino Elasticsearch:Node.js ECS 日志記錄 - Winston 中的第三篇文章。在今天的文章中,我將描述如何使用 Morgan 包針對 Node.js 應用進行日子記錄。此 Morgan Node.j…

包裝器 std::function

使用前&#xff0c;包頭文件&#xff1a;#include <functional> std::function 是 C標準庫 中的一個通用函數包裝器&#xff1b; 它可以儲存、復制、調用任何可調用的對象&#xff0c;包括&#xff1a;函數指針、成員函數、綁定的成員函數、lambda表達式、仿函數等。 1…

Selenium Grid- 讓自動化分布式執行變得可能

什么是 Selenium Grid&#xff1f; Selenium Grid 是 Selenium 的三大組件之一&#xff0c;允許用戶同時在不同的機器和系統上測試不同瀏覽器。 也就是說 Selenium Grid 支持分布式的測試執行。它可以讓你的測試用例在一個分布式的執行環境中運行。 由上圖可見&#xff0c;測試…

linux:基礎知識及命令[圖表]

lsof:查找文件 普通文件、目錄、進程&#xff08;/proc&#xff09;、輸入輸出設備&#xff08;/dev&#xff09;、網絡字節流socket、鏈接文件、管道文件 基本用法 lsof&#xff1a;列出所有打開的文件。lsof /path/to/file&#xff1a;列出打開指定文件的所有進程。lsof -…

大話光學原理:4.散射:瑞利、拉曼、米氏和布里淵

這是一縷柔和的光&#xff0c;在空氣的舞臺上輕盈地跳躍。它悠然自得&#xff0c;在寧靜的空間中緩緩前行。然而&#xff0c;一片細薄透明的介質擋住了它的腳步&#xff0c;它毫無預兆地撞上了這片障礙。在這短暫的接觸中&#xff0c;它被分解成無數微小的粒子&#xff0c;被迫…

增強現實(AR)與虛擬現實(VR)的區別?

隨著科技的飛速發展&#xff0c;增強現實&#xff08;AR&#xff09;與虛擬現實&#xff08;VR&#xff09;技術在各個領域展現出巨大的潛力和應用前景。這兩種技術雖然在體驗和實現方式上有所不同&#xff0c;但都為用戶提供了全新的感知體驗。本文將詳細解析AR和VR的概念、區…

機器視覺/自然語言/生成式人工智能綜合應用實驗平臺-實訓平臺-教學平臺

AIGC是人工智能1.0時代進入2.0時代的重要標志&#xff0c;MIT 科技評論也將Al合成數據列為2022年十大突破性技術之一&#xff0c;甚至將生成性Al(Generative Al) 稱為是AI領域過去十年最具前景的進展。同時&#xff0c;AIGC領域崗位需求數量暴漲。高校方面在人工智能專業與機器…

javascript 處理###分隔的字符串

在 JavaScript 中&#xff0c;可以使用 split 方法將字符串按 ### 分隔成數組。以下是一個示例代碼&#xff0c;展示了如何處理由 ### 分隔的字符串&#xff1a; 示例代碼 // 示例字符串 let str "part1###part2###part3###part4";// 使用 split 方法按 ### 分隔字…

DEJA_VU3D - Cesium功能集 之 122-體元渲染(官方Voxels)

前言 編寫這個專欄主要目的是對工作之中基于Cesium實現過的功能進行整合,有自己琢磨實現的,也有參考其他大神后整理實現的,初步算了算現在有差不多實現小140個左右的功能,后續也會不斷的追加,工作原因可能無法像以前那樣周更2-3篇,但是閑下來還是會不定期的更新,Cesium…