欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

淺談在函數(shù)中返回動(dòng)態(tài)的內(nèi)存

 更新時(shí)間:2016年12月22日 09:40:54   投稿:jingxian  
下面小編就為大家?guī)?lái)一篇淺談在函數(shù)中返回動(dòng)態(tài)的內(nèi)存。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

1、有以下題目:

#include <iostream>
using namespace std;

void GetMemeory(char* p)
{
  p=(char*)malloc(sizeof(char)*100);
}

int main()
{
  char *str=NULL;
  GetMemeory(str);
  strcpy(str,"Thunder");
  strcat(str,"Downloader");
  printf(str);
  system("pause");
  return 0;
}

我們期望的輸出是:ThunderDownloader

然而當(dāng)我們運(yùn)行此段代碼的時(shí)候發(fā)現(xiàn),程序崩潰了。

其實(shí)我們深入分析下不難發(fā)現(xiàn),當(dāng)我們傳入str到GetMemeory()函數(shù)中的時(shí)候,該函數(shù)我們創(chuàng)建了一個(gè)臨時(shí)

的指針變量片p,然后將其指向NULL。然后我們?yōu)榕R時(shí)指針變量p動(dòng)態(tài)分配內(nèi)存,注意,當(dāng)我們?cè)诜祷氐臅r(shí)候

整個(gè)臨時(shí)指針變量是釋放掉的,因?yàn)槠鋬?nèi)存是在棧內(nèi)存中分配的。但是我們之前傳入的str的內(nèi)存地址與臨時(shí)變量

的內(nèi)存地址是不相同的。所以此時(shí)str不能獲取在函數(shù)GetMemmory分配的內(nèi)存,因此后面的字符串復(fù)制和鏈接操作

都將造成程序崩潰。

我們可以用下面的圖形更加生動(dòng)的這一過(guò)程:

:

假設(shè)str本身內(nèi)存為0x123 臨時(shí)指針變量p的內(nèi)存為0x456 動(dòng)態(tài)分配的內(nèi)存起始地址為0x789

當(dāng)GetMemory函數(shù)結(jié)束的時(shí)候p被釋放,而再也無(wú)指針指向這塊動(dòng)態(tài)分配的內(nèi)存了。另外str也不可能

獲取這段動(dòng)態(tài)分配的內(nèi)存的地址。所以也造成了內(nèi)存泄露。

我們可以用如下兩種方法解決這一問(wèn)題:

一種是二級(jí)指針:

#include <iostream>
using namespace std;

void GetMemeory(char** p)
{
  (*p)=(char*)malloc(sizeof(char)*100);
}

int main()
{
  char *str=NULL;
  GetMemeory(&str);
  strcpy(str,"Thunder");
  strcat(str,"Downloader");
  printf(str);
  system("pause");
  return 0;
}

運(yùn)行截圖為:

關(guān)于二級(jí)指針的方法可以參考如下的流程圖:

一種是指針的引用方法:

#include <iostream>
using namespace std;

void GetMemeory(char*& p)
{
  p=(char*)malloc(sizeof(char)*100);
}

int main()
{
  char *str=NULL;
  GetMemeory(str);
  strcpy(str,"Thunder");
  strcat(str,"Downloader");
  printf(str);
  system("pause");
  return 0;
}

運(yùn)行截圖:

關(guān)于指針引用方法的流程圖如下:

能力有限,難免有沒(méi)說(shuō)清楚的地方,還望包涵。

以上就是小編為大家?guī)?lái)的淺談在函數(shù)中返回動(dòng)態(tài)的內(nèi)存全部?jī)?nèi)容了,希望大家多多支持腳本之家~

相關(guān)文章

  • c語(yǔ)言conio.h基本知識(shí)點(diǎn)總結(jié)

    c語(yǔ)言conio.h基本知識(shí)點(diǎn)總結(jié)

    在本篇文章里小編給大家分享的是關(guān)于c語(yǔ)言conio.h是什么意思的相關(guān)知識(shí)點(diǎn),需要的朋友們可以學(xué)習(xí)參考下。
    2020-02-02
  • 基于OpenCV自定義色條實(shí)現(xiàn)灰度圖上色功能代碼

    基于OpenCV自定義色條實(shí)現(xiàn)灰度圖上色功能代碼

    今天通過(guò)本文給大家分享基于OpenCV自定義色條實(shí)現(xiàn)灰度圖上色功能代碼,代碼簡(jiǎn)單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2021-11-11
  • C語(yǔ)言數(shù)組和指針的問(wèn)題一道非常值得深思的筆試題

    C語(yǔ)言數(shù)組和指針的問(wèn)題一道非常值得深思的筆試題

    今天小編就為大家分享一篇關(guān)于C語(yǔ)言數(shù)組和指針的問(wèn)題一道非常值得深思的筆試題,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2018-12-12
  • C語(yǔ)言關(guān)于二叉樹(shù)中堆的創(chuàng)建和使用整理

    C語(yǔ)言關(guān)于二叉樹(shù)中堆的創(chuàng)建和使用整理

    大家好,這里是針對(duì)二叉樹(shù)中堆結(jié)構(gòu)的順序儲(chǔ)存,整理出來(lái)一篇博客供我們一起復(fù)習(xí)和學(xué)習(xí),如果文章中有理解不當(dāng)?shù)牡胤?還希望朋友們?cè)谠u(píng)論區(qū)指出,我們相互學(xué)習(xí),共同進(jìn)步
    2022-08-08
  • C++中套接字庫(kù)sockpp的使用詳解

    C++中套接字庫(kù)sockpp的使用詳解

    sockpp是一個(gè)開(kāi)源、簡(jiǎn)單、現(xiàn)代的C++套接字庫(kù),這篇文章主要為大家詳細(xì)介紹一下套接字庫(kù)sockpp的使用,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以學(xué)習(xí)一下
    2023-11-11
  • 對(duì)C語(yǔ)言中指針的理解與其基礎(chǔ)使用實(shí)例

    對(duì)C語(yǔ)言中指針的理解與其基礎(chǔ)使用實(shí)例

    這篇文章主要介紹了對(duì)C語(yǔ)言中指針的理解與其基礎(chǔ)使用實(shí)例,文中援引了知乎熱門(mén)問(wèn)題"為什么說(shuō)指針是 C 語(yǔ)言的精髓?"中的精彩回答,需要的朋友可以參考下
    2016-03-03
  • Sersync+Rsync實(shí)現(xiàn)觸發(fā)式文件同步實(shí)戰(zhàn)過(guò)程

    Sersync+Rsync實(shí)現(xiàn)觸發(fā)式文件同步實(shí)戰(zhàn)過(guò)程

    sersync是使用c++編寫(xiě),而且對(duì)linux系統(tǒng)文 件系統(tǒng)產(chǎn)生的臨時(shí)文件和重復(fù)的文件操作進(jìn)行過(guò)濾。下面通過(guò)本文給大家分享Sersync+Rsync實(shí)現(xiàn)觸發(fā)式文件同步實(shí)戰(zhàn)過(guò)程,需要的朋友參考下吧
    2017-09-09
  • Qt物聯(lián)網(wǎng)管理平臺(tái)之實(shí)現(xiàn)告警短信轉(zhuǎn)發(fā)

    Qt物聯(lián)網(wǎng)管理平臺(tái)之實(shí)現(xiàn)告警短信轉(zhuǎn)發(fā)

    系統(tǒng)在運(yùn)行過(guò)程中,會(huì)實(shí)時(shí)采集設(shè)備的數(shù)據(jù),當(dāng)采集到的數(shù)據(jù)發(fā)生報(bào)警后,可以將報(bào)警信息以短信的形式發(fā)送給指定的管理員。本文將利用Qt實(shí)現(xiàn)告警短信轉(zhuǎn)發(fā),感興趣的可以嘗試一下
    2022-07-07
  • C++?OpenCV實(shí)戰(zhàn)之零部件的自動(dòng)光學(xué)檢測(cè)

    C++?OpenCV實(shí)戰(zhàn)之零部件的自動(dòng)光學(xué)檢測(cè)

    這篇文章主要為大家介紹一個(gè)C++?OpenCV的實(shí)戰(zhàn)——零部件的自動(dòng)光學(xué)檢測(cè),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2022-09-09
  • C語(yǔ)言的基本語(yǔ)法詳解

    C語(yǔ)言的基本語(yǔ)法詳解

    本篇文章主要講解C語(yǔ)言 基本語(yǔ)法,這里提供簡(jiǎn)單的示例和代碼來(lái)詳細(xì)講解C語(yǔ)言的基本語(yǔ)法,開(kāi)始學(xué)習(xí)C語(yǔ)言的朋友可以看一下,希望能夠給你帶來(lái)幫助
    2021-09-09

最新評(píng)論