1. 程式人生 > >包含雙重指標的結構體指標的分配記憶體與釋放記憶體

包含雙重指標的結構體指標的分配記憶體與釋放記憶體

最近在做基於多目標的蟻群演算法在雲端計算的虛擬機器放置的應用,涉及到具體實現過程時的資料結構時,經常需要設計出包含雙重指標的結構體指標,而進行分配和釋放記憶體時,會碰到多層開闢空間和不能完全釋放記憶體的問題。如下面例子:

typedef struct Solution
{
int **bivX;
int *bivY;
int IsDominated;/////0代表未被標記為dominated
}SolutionTotal;

SolutionTotal *STotal;

NA=10;
M=20;

/////開闢空間

STotal=new SolutionTotal[M*NA];////////STotal是單指標

for(i=0;i<M*NA;i++)
{
STotal[i].bivX=new int*[numVM];///////STotal[i].bivX是雙重指標
for(j=0;j<numVM;j++)
{
STotal[i].bivX[j]=new int[numHost];//////STotal[i].bivX[j]是單指標
}
STotal[i].bivY=new int[numHost];////////STotal[i].bivY是單指標

}

///////釋放空間

if(STotal!=NULL)
{
for(i=0;i<M*NA;i++)
{
for(j=0;j<numVM;j++)
delete []STotal[i].bivX[j];/////////從裡釋放到外,釋放是陣列時,delete []p
delete []STotal[i].bivX;////////
delete []STotal[i].bivY;/////
}
delete []STotal;
}

從上面例子可以看出開闢記憶體是從外開闢到裡面,而釋放記憶體時從裡面釋放到外面,這樣就可以保證記憶體不洩露!

相關推薦

包含雙重指標結構指標分配記憶體釋放記憶體

最近在做基於多目標的蟻群演算法在雲端計算的虛擬機器放置的應用,涉及到具體實現過程時的資料結構時,經常需要設計出包含雙重指標的結構體指標,而進行分配和釋放記憶體時,會碰到多層開闢空間和不能完全釋放記憶體的問題。如下面例子: typedef struct Solution {i

c++佇列指標 結構指標

#include<iostream>#include<queue>#include<map>#include<string>#include<mut

結構指標陣列 記憶體分配 釋放

#include <iostream> #include <vector> #include <map> #include <iterator> #include <algorithm> using namesp

結構定義、結構指標記憶體分配指標結構體形參的深入理解

說明:此程式為深入學習資料結構時候,對於資料結構最重要的基礎(結構體、指標、記憶體分配) 方面的一些理解,我自己通過這段程式說明一些自己得到的結論;希望對看到這篇程式的c愛好者 有幫助,如果有理解錯誤的地方希望各位聯絡我,一起討論學習.說實話,我學習c就半年吧,除了 上課自學的,發現最難的部分就是指標了.廢話

C\C++中結構變數結構指標記憶體分配問題

宣告一個結構體變數,無論是否初始化,都開闢記憶體,宣告一個結構體指標變數,對其初始化的時候才會開闢記憶體。 A a[3];  a是A型的,有3個,當然分配A乘3大小的空間 A* a;    a是A*型的,當然只分配A*大小的空間,而不會分配A大小的空間好像跟你說的不太一樣,

結構指標內的指標變數成員的記憶體分配

zclReportCmd_t *reportCmd;typedef struct {   uint8       numAttr;       // number of reports in the list   zclReport_t attrList[];    //

為什麼連結串列操作過程中對於結構指標,都要用malloc來開闢記憶體空間

在使用上,malloc 和 new 至少有兩個不同: new 返回指定型別的指標,並且可以自動計算所需要大小。比如: 在使用上,malloc 和 new 至少有兩個不同: new 返回指定型別的指標,並且可以自動計算所需要大小。比如: 1 2 3

C語言 結構指標需要申請記憶體但函式定義指標不需要申請

在函式定義指標或者變數已經為指標本身和變數本身分配了記憶體所以用指標指向一個已經定義的變數時不需再分配記憶體 但是資料結構中用指標指向結構體時只為指標本身分配了記憶體如果要對結結構體填入內容就要分配一個結構體大小的記憶體才可以 但只自己分配的記憶體一定要養成

關於為結構指標申請記憶體的問題

之前在實現單鏈表的時候出現的一個問題 比如建立一個結構體 struct List {int data;struct List* link; }; 如果我直接宣告一個結構體指標 List* p; 那麼對這個指標進行操作的話一種是把一個Lis型別的變數的指標賦值給p; 另一種

結構指標記憶體——指標陣列——字串指標記憶體申請

前幾天用的結構體,結構體內還包含有結構體指標和陣列以及指向字串的指標,發現自己對這方面的東西還很容易犯錯,故現在講其中容易出錯的地方寫出來,分享給大家也方便自己日後檢視。 typedef struct { char name[50]; char job[50];

【C/C++開發】函式使用結構結構指標作為返回值分析

函式使用結構體、結構體指標作為返回值分析 32位機,gcc編譯器 使用結構體作為返回值 分析反彙編程式碼可知,當被呼叫的子函式返回值為結構體的時候,呼叫函式將分配一段空間用於存放返回的結構體(使用一個結構體變數接受返回值),並將這段空間的地址作為呼叫時的引數壓棧。子程式不負責對要返回的結構體分

c語言typedef 結構指標

轉載部落格:https://blog.csdn.net/developerof/article/details/24885205?utm_source=blogxgwz0  #include<stdio.h> #include<

關於如何理解連結串列結構指標引用LinkNode * &L的問題

初學資料結構,在學習的過程中有了這個疑問,已經理解其中緣由,特寫篇部落格和大家一起分享交流。 C++中的引用:& int a=10; int &ra=a; 注意:此處&是識別符號,不是取地址符! a是目標原名稱,ra是引用名,由引用的作用“引用就是某

結構_結構指標,tyepdef_union_enum

#include "stdafx.h" #include <stdlib.h> #include <windows.h> #include <string.h> struct Student{ char *name; int age; }; //

C程式碼開發遇到的問題 變數初始化和結構指標移動

1. 變數初始化 函式內部的變數如果不初始化的話預設不是0而是一個隨機值。 下面的程式用來列印一個未初始化的無符號的整型值,執行幾遍,每次的結果都會不一樣 #include <stdio.h> void PrintUint() { /* 預設是隨機值,不一定是0 *

淺談結構如何分配記憶體

下面直接以例子進行說明: (1)先是定義瞭如下結構體: struct{ char a; int i; double d; }text; 然後用sizeof(text),預期結果是1+2+8 = 11???如果這樣想就錯了,答案是16. (2)然後,換一下變數的順序:

使用offsetof對結構指標偏移操作

題目來自於COMP20003 Tutorial 2: Program m ing Challenge 2.2 The technology stack at Hidebound Inc. uses a subset of C w hich doesn't have the '.' or '->'ope

結構指標,C語言結構指標詳解

結構體指標,可細分為指向結構體變數的指標和指向結構體陣列的指標。 指向結構體變數的指標 前面我們通過“結構體變數名.成員名”的方式引用結構體變數中的成員,除了這種方法之外還可以使用指標。前面講過,&student1 表示結構體變數 student1 的首地址,即 student1 第一個項的地址

static 指標 結構使用

static 指標 結構體使用 static使用注意事項 static --> //修飾區域性變數:將變數的生命週期變為和整個程式相同 但是不改變作用域 //修飾全域性變數:將改變作用域為當前檔案 //修飾一個函式:修改了函式的作用域為當前檔案 指標定義

結構指標和陣列的使用

同種型別的結構體是可以進行賦值的 【1】結構體陣列 (1)結構體陣列的定義 1)具有相同結構體型別的結構體變數也可以組成陣列,稱它們為結構體陣列。 結構體陣列的每一個數組元素都是結構體型別的資料,它們都分別包括各個成員(分量)項。 2)定義結構體陣列的方法和定義結構體變數的方法相仿