【C語言進階】動態內存管理的面試題||練習

本節內容專門整理了一些動態內存管理的面試題,配有詳細的解答。

目錄

1. 看代碼說結果

2. 看代碼說結果

3. 看代碼說結果

4.小樂樂與歐幾里得?

描述

分析1:

分析2:

代碼:

5. 空心正方形

分析:

1. 看代碼說結果

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>char* GetMemory(void) 
{char p[] = "hello world";return p;
}
void Test(void) 
{char* str = NULL;str = GetMemory();printf(str);
}int main() 
{	Test();return 0;
}

? ? ? ? 這里會報錯,這是常見的野指針錯誤;首先調用Test函數再調用GetMemory函數,然后將字符串賦給p數組,執行完畢后p所指向的區域會進行銷毀,但是返回了p的地址,對野指針進行解引用一定會出錯。

? ? ? ? 這里舉一個例子,涉及到函數棧幀的知識點,之后會單獨做一期來進行講解函數棧幀。

????????正常情況下這里的p是一個野指針,這是因為p指向的空間已經被回收了,這時候調用printf,就會創建一個函數棧幀在main函數之上,在原來已經被銷毀的test函數的位置,所以在test的內部的變量a一定會被覆蓋,最后會打印出其他值;

? ? ? ? 如果沒有hehe的輸出,這里在內存沒有被覆蓋的情況下有幾率會打印出10。

2. 看代碼說結果

? ? ? ? ?這段代碼可以正常輸出hello,存在一個問題就是沒有手動釋放內存空間,需要在輸出之后加上:

free(str);
str = NULL;

3. 看代碼說結果

? ? ? ? ?str并沒有置為空,所以這是一個野指針的問題,這段代碼將已經回收的內存重新覆蓋新的值,這屬于非法訪問已經釋放的內存,所以雖然可以打印world,但是邏輯上是不允許的。

? ? ? ? 需要再free的后面加上:

str = NULL;

????????下面給一段代碼,來根據代碼了解內存區域:

????????首先全局變量和靜態變量存放在數據段(全局區)之中;

? ? ? ? 局部變量是存放在棧區中;

? ? ? ? 字符串常量存放在代碼段(常量區)中;

? ? ? ? 使用malloc開辟的空間是在堆區中;

4.小樂樂與歐幾里得?

描述

小樂樂最近在課上學習了如何求兩個正整數的最大公約數與最小公倍數,但是他竟然不會求兩個正整數的最大公約數與最小公倍數之和,請你幫助他解決這個問題。

輸入描述:

每組輸入包含兩個正整數n和m。(1 ≤ n ≤ 109,1 ≤ m ≤ 109)

輸出描述:

對于每組輸入,輸出一個正整數,為n和m的最大公約數與最小公倍數之和。

示例1

輸入:

10 20

輸出:

30

分析1:

? ? ? ? 最大公約數:可以從這兩個數中的較小值出發,逐步遞減;

? ? ? ? 最小公倍數:可以從這兩個數中的較大值出發,逐步遞增。

分析2:

? ? ? ? 上面的方法整體效率太低了,我們開始想想另外一個辦法?:輾轉相除法。

n % m 余數若不為0,那么r賦給m,m賦給n,繼續相余,如果得數是0,此時我們的最大公約數就是m。

? ? ? ? 此時最小公倍數是(n * m) / 最大公約數。

這里需要注意的是數字的范圍,所以可以給定長整型。

代碼:

#include <stdio.h>
/*
思路:
1、使用輾轉相除法求出最大公約數。
2、兩個數相乘再除以最大公約數就是最小公倍數。
3、輸出記得使用長整型。*/
int main() {long n = 0,m = 0;while( scanf("%ld %ld",&n,&m) == 2){long i = n;long j = m;long r = 0;// 計算最大公約數while(r = i % j){i = j;j = r; }// 跳出循環j就是最大公約數// 計算最小公倍數r = (m * n) / j;printf("%ld\n", r + j);}return 0;
}

5. 空心正方形

KiKi學習了循環,BoBo老師給他出了一系列打印圖案的練習,該任務是打印用“*”組成的“空心”正方形圖案。

輸入描述:

多組輸入,一個整數(3~20),表示輸出的行數,也表示組成正方形邊的“*”的數量。

輸出描述:

針對每行輸入,輸出用“*”組成的“空心”正方形,每個“*”后面有一個空格。

示例1

輸入

4

輸出

* * * * 
*     * 
*     * 
* * * * 

分析:

? ? ? ? 我們可以先按照打印二維數組打印“* ”,這樣我們會得到一個正方形,當我們需要空心的時候,只需要判斷當行數為0或者為總行數-1的時候 或者 列數為0或者總列(行)數-1的時候打印* ,其余時候打印兩個空格即可。

#include <stdio.h>int main() {int a = 0;while(scanf("%d", &a) == 1){int i = 0;for (i = 0; i < a; i++) {int j = 0;for (j = 0; j < a; j++) {if (i == 0 || i == (a-1) ||j == 0 || j == (a-1) ) {printf("* ");}else{printf("  ");}}printf("\n");}}return 0;
}

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

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

相關文章

【圖論】倍增與lca

void dfs(long u,long father){ dep[u]dep[father]1;//只在這里初始化depfor(long i1;(1<<i)<dep[u];i)fa[u][i]fa[fa[u][i-1]][i-1];//只這里用的倍增for(long ihead[u];~i;iedge[i].next){long vedge[i].to;if(vfather)continue;fa[v][0]u;dfs(v,u); }} long lca(lo…

VS Code 美化插件

目錄1. Better Comments 更好的注釋2. indent-rainbow 彩虹的縮進3. Trailing Spaces 尾隨的空格4. Gruvbox Material 護眼的材質5. Md Editor 博客編輯器6. 待補充推薦筆記&#xff1a;VS Code寫代碼必備的五款代碼美化插件 1. Better Comments 更好的注釋 Better Comments Be…

火語言 RPA 在日常運維中的實踐

在系統運維和技術支持工作中&#xff0c;總有一些操作像 “固定程序” 一樣循環往復&#xff1a;定期檢查服務器狀態、批量處理用戶權限申請、手動清理系統日志…… 這些工作步驟固定、邏輯簡單&#xff0c;卻占用了大量本可用于故障排查和系統優化的時間。近期在優化運維團隊的…

FOUPK3system5XOS系統 NTX V2.0發布通知

FOUPK3system5XOS系統NTX V2.0發布通知更新1.系統安全&#xff1a;使用FOUPK3system5XOS NOS X9新內核與FOUPK3system5XOS系統19.63正式版一樣提供更好的安全性2.原生應用&#xff1a;啟用FOUPK3system5XOS ONS X9 API 72服務FOUPK3system5XOS系統 NTX V2.0用戶支持使用FOUPK3…

爬蟲算法原理解析

文章目錄 核心算法原理 1. 圖遍歷算法 廣度優先搜索(BFS) 深度優先搜索(DFS) 2. URL調度算法 優先級隊列調度 3. 頁面去重算法 基于哈希的去重 基于布隆過濾器的去重 4. 鏈接提取與規范化 5. 抓取頻率控制算法 6. 增量爬取算法 高級算法策略 1. PageRank算法在爬蟲中的應用 2. …

探索雙鏈表:C語言中的鏈式結構魔法

目錄 引言 一、雙鏈表基礎 1.1、什么是雙鏈表&#xff1f; 1.2、雙鏈表節點的結構定義 二、雙鏈表的基本操作 2.1、雙鏈表的初始化 2.2、尾插法 2.3、頭插 2.4、判斷雙鏈表是否為空 2.5、尾刪法 2.6、頭刪法 2.7、查找 2.8、雙鏈表在指定位置之前插入 2.9、雙鏈表…

HTML5 + CSS3模擬西門慶、武大郎和潘金蓮的精彩520微信聊天,看完我又相信愛情了

今天520了&#xff0c;我用HTML5 CSS3模擬了西門慶、武大郎和潘金蓮的精彩微信聊天&#xff0c;希望你看完以后可以在緊張的工作中&#xff0c;放松一下&#xff0c;開心一下&#xff0c;同時祝你在這個520可以過得開心快樂。 目錄 1 實現思路 1.1 聊天實現素材 1.2 HTML布…

【Linux】Linux了解與基本指令(1)

hello~ 很高興見到大家! 這次帶來的是C中關于Linux基本指令這部分的一些知識點,如果對你有所幫助的話,可否留下你寶貴的三連呢? 個 人 主 頁: 默|笙 文章目錄一、認識Linux二、操作系統&#xff08;OS&#xff09;三、基本指令1. 目錄與普通文件1.1 目錄1.2 普通文件2. pwd 與…

dify 學習筆記

目錄 啟動項目 瀏覽器訪問&#xff1a; dify刪除工作流 代碼是開源dify 啟動項目 cd E:\project\qwen\dify-main\docker docker compose up -d 瀏覽器訪問&#xff1a; http://127.0.0.1/apps dify刪除工作流 右下角&#xff0c;三個點&#xff0c;點擊彈出框&#xff0…

【YOLOv8改進 - 特征融合】FCM:特征互補映射模塊 ,通過融合豐富語義信息與精確空間位置信息,增強深度網絡中小目標特征匹配能力

YOLOv8目標檢測創新改進與實戰案例專欄 專欄目錄: YOLOv8有效改進系列及項目實戰目錄 包含卷積,主干 注意力,檢測頭等創新機制 以及 各種目標檢測分割項目實戰案例 專欄鏈接: YOLOv8基礎解析+創新改進+實戰案例 文章目錄 YOLOv8目標檢測創新改進與實戰案例專欄 介紹 摘要 文…

算法訓練營day30 貪心算法④ 重疊問題 452. 用最少數量的箭引爆氣球、435. 無重疊區間 、 763.劃分字母區間

貪心算法的第四篇博客&#xff0c;主要是重疊問題的練習&#xff0c;思路都較為簡單&#xff0c;最后一題可能需要著重思考一下 452. 用最少數量的箭引爆氣球 遍歷數組&#xff0c;如果存在重疊則減少一支箭&#xff08;不重疊則增加一支箭&#xff09; 重疊的判定&#xff1a…

Gradio, Streamlit, Dash:AI應用開發的效率之選

在人工智能時代&#xff0c;如何快速將模型原型轉化為交互式應用&#xff0c;是許多開發者面臨的挑戰。Gradio、Streamlit 和 Dash 作為流行的Python框架&#xff0c;各自以其獨特的優勢&#xff0c;幫助我們高效地構建AI應用界面。本文將深入對比這三大框架的優缺點、適用場景…

數學基礎弱能學好大數據技術嗎?

很多同學剛進入大學&#xff0c;一聽到“大數據”“數據分析”這些詞&#xff0c;就覺得必須得是數學大佬才能玩得轉。高數線代概率論&#xff0c;光聽名字就頭大&#xff0c;更別說那些復雜的公式和推導了。但事實真的是這樣嗎&#xff1f;數學不好&#xff0c;就不能學大數據…

子進程信號處理

SIGCHLD 信號詳解??一、信號定義與作用??SIGCHLD? 是 UNIX/Linux 系統中由內核向父進程發送的信號&#xff0c;用于通知子進程的狀態變化&#xff08;如終止、停止或恢復&#xff09;?。其主要作用包括&#xff1a;?回收子進程資源?&#xff1a;避免子進程終止后成為僵…

WPF 項目設置應用程序圖標和設置程序集圖標

在 WPF 項目中更改生成的可執行文件&#xff08;.exe&#xff09;圖標需要完成兩個關鍵步驟&#xff1a;設置應用程序圖標和設置程序集圖標。以下是詳細操作指南&#xff1a; 第一步&#xff1a;準備圖標文件 準備一個 .ico 格式的圖標文件&#xff08;必須使用 ICO 格式&…

JMeter壓測黑馬點評優惠券秒殺的配置及請求爆紅問題的解決(詳細圖解)

目錄 一、前言 二、優惠券秒殺壓測配置 三、已配置token但是請求全部爆紅的問題 四、配置JSON斷言后的效果 一、前言 在學習黑馬點評優惠券秒殺功能的壓力測試時&#xff0c;由于老師沒有任何引導而是直接開始測試&#xff0c;所以本博客記錄一下JMeter壓測黑馬點評優惠券秒…

Nginx 運維實戰: 什么是反向代理,如何配置?

在互聯網的龐大架構中&#xff0c;Nginx 作為一款高性能的 Web 服務器和反向代理服務器&#xff0c;發揮著至關重要的作用。其中&#xff0c;反向代理功能更是 Nginx 被廣泛應用的核心原因之一。本文將深入探討什么是反向代理&#xff0c;以及如何在 Nginx 中進行反向代理的配置…

短視第三套多功能主題3.0二開模板蘋果CMS插件重構版

這款短視第三套多功能主題二開模板蘋果CMS插件重構版源碼&#xff0c;基于市面上現有的二開版本進行的重制修正更新。目前已經完美適配新版 4049 以上的蘋果Cms系統&#xff0c;無需擔心因系統版本問題導致的不兼容情況。?主題插件重構后支持一鍵啟動插件自動安裝模板&#xf…

詳解力扣高頻SQL50題之1148. 文章瀏覽 I【入門】

傳送門&#xff1a;1148. 文章瀏覽 I 題目 Views 表&#xff1a; ---------------------- | Column Name | Type | ---------------------- | article_id | int | | author_id | int | | viewer_id | int | | view_date | date | ---------------------- 此表可能會存在重復…

內外網互傳文件 安全、可控、便捷的跨網數據交換

內外網互傳文件 安全、可控、便捷的跨網數據交換破解企業數字化痛點&#xff0c;重新定義文件傳輸標準在數字化轉型浪潮中&#xff0c;企業面臨著前所未有的挑戰&#xff1a;內網系統需要嚴密防護&#xff0c;外網協作又要高效便民。如何在網絡安全與業務效率之間找到完美平衡&…