電子產(chǎn)業(yè)一站式賦能平臺(tái)

PCB聯(lián)盟網(wǎng)

搜索
查看: 57|回復(fù): 0
收起左側(cè)

面試題:申請(qǐng)空間時(shí)malloc(0)會(huì)發(fā)生什么?

[復(fù)制鏈接]

266

主題

266

帖子

2074

積分

三級(jí)會(huì)員

Rank: 3Rank: 3

積分
2074
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2024-10-9 14:17:00 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式


申請(qǐng)空間時(shí)malloc(0)會(huì)發(fā)生什么?
有讀者提到以前面試的時(shí)候被問(wèn)到過(guò)這個(gè)題,正好我剛畢業(yè)的時(shí)候也被問(wèn)過(guò),當(dāng)時(shí)內(nèi)心還一陣腹誹,這道面試題又是會(huì)被噴沒(méi)有意義的題,個(gè)人也感覺(jué)研究這種沒(méi)什么意義,不過(guò)知道下還是沒(méi)有壞處的。
  • #include #include
    int main(){    char* p = (char*)malloc(0);    printf("Pointer address: %p
    ", (void*)p);
        return 0;}按照第一反應(yīng),這種時(shí)候應(yīng)該返回空指針NUL,畢竟你沒(méi)有申請(qǐng)到空間地址,動(dòng)手實(shí)踐在Windows上和Linux上分別運(yùn)行,發(fā)現(xiàn)都打印出了地址
  • //WindowsPointer address: 000001ABC6A161B0
  • //linuxPointer address: 0xe5e260實(shí)際動(dòng)手可以發(fā)現(xiàn),mallc(0)返回的指針不是空指針。
    其實(shí)這種涉及到標(biāo)準(zhǔn)庫(kù)的問(wèn)題,直接看標(biāo)準(zhǔn)就行,cppreference上對(duì)malloc為0的情況有明確的說(shuō)明:
  • mallocC Dynamic memory management Defined in header void *malloc( size_t size );
    If size is zero, the behavior of malloc is implementation-defined. For example, a null pointer may be returned. Alternatively, a non-null pointer may be returned; but such a pointer should not be dereferenced, and should be passed to free to avoid memory leaks.
    the behavior of malloc is implementation-defined.是什么意思?
    意思就是當(dāng)malloc接收到一個(gè)大小為0的請(qǐng)求時(shí),其行為是由實(shí)現(xiàn)定義的。也就是說(shuō)不同的實(shí)現(xiàn)可以選擇不同的處理方式。
    返回NULL:
    許多實(shí)現(xiàn)選擇在這種情況下返回NULL,因?yàn)榉峙?字節(jié)的內(nèi)存沒(méi)有實(shí)際用途。
    返回非空指針:
    有些實(shí)現(xiàn)可能會(huì)返回一個(gè)非空指針。這個(gè)指針不應(yīng)被解引用(dereference),并且應(yīng)該傳遞給free函數(shù)以避免內(nèi)存泄漏。

    總結(jié):
    malloc(0)的返回值由實(shí)現(xiàn)編譯器的人定義,可以是NULL,也可以是一個(gè)非空指針,深究沒(méi)多大意義。
    end

    一口Linux

    關(guān)注,回復(fù)【1024】海量Linux資料贈(zèng)送
    精彩文章合集
    文章推薦
    ?【專輯】ARM?【專輯】粉絲問(wèn)答?【專輯】所有原創(chuàng)?【專輯】linux入門(mén)?【專輯】計(jì)算機(jī)網(wǎng)絡(luò)?【專輯】Linux驅(qū)動(dòng)?【干貨】嵌入式驅(qū)動(dòng)工程師學(xué)習(xí)路線?【干貨】Linux嵌入式所有知識(shí)點(diǎn)-思維導(dǎo)圖
  • 發(fā)表回復(fù)

    本版積分規(guī)則

    關(guān)閉

    站長(zhǎng)推薦上一條 /1 下一條


    聯(lián)系客服 關(guān)注微信 下載APP 返回頂部 返回列表