1. 程式人生 > >二級指標的申請跟刪除(基於C++的new機制)

二級指標的申請跟刪除(基於C++的new機制)

<pre name="code" class="cpp">#include<conio.h>
#include<iostream>
#include<stdlib.h>
using namespace std;
#define FORi(N) for(int i=0;i!=N;i++)
#define FORj(N) for(int j=0;j!=N;j++)
#define El  <<endl
int main(){
	int **
		iptr = new int*[3];
	int*
		tempPtr = new int[9];
	FORi(3)			//----3申請連續字串
		iptr[i] = tempPtr;// +3 * i;
	tempPtr = NULL;



	FORi(3)FORj(3){
		iptr[i][j] = i*j;
		cout << iptr[i][j] << ',';
	}
	cout << endl;


	char **
		cptr = NULL;
	cptr = (char **)malloc(sizeof(char *)* 3);
	FORi(3){				//----分別申請3字串
		cptr[i] = (char *)malloc(sizeof(char)* 3);
	}
	cptr[0] = "cdb";
	cptr[1] = "XYZ";
	cptr[2] = "AEF";


	FORi(3)FORj(3)
	{
		cout << cptr[i][j] El;
	}
	FORi(3)
	{
		cout << cptr[i] << endl;
		cout << &cptr[i] << endl;
	}
	/*for (int i = 2; i >= 0;i--)
	delete iptr[i];*/		//----編譯不通過;
	/*
	{
	delete iptr[1];
	delete iptr[0];
	}*/						//----不通過,恰如以上
	//delete iptr[0];			//----通過,
	

	delete iptr[1], iptr[1] == NULL;	//----此句刪除的是原來的temp的記憶體
	/*----通過,即delete p,無論p指向順序記憶體期間哪裡,delete p, p++ 都整塊刪除*/
	
	
	delete iptr, iptr = NULL;//----或者delete []iptr成功.
	cout << "~iptr 成功!"El;

	//FORi(3){				//----刪除分別申請的三段char*記憶體,即字串的引用,但無變數賦值刪除不了
	//	delete  cptr[i];
	//	cptr[i] = NULL;
	//}
	delete [] cptr, cptr = NULL;		//----刪除二級單塊連續記憶體;
	cout << "~ cptr 成功!"El;		//----VS2013刪除失敗,用free有提示相關截斷
	return _getch();
}//----walsfy168,Sep 24 測試.


相關推薦

二級指標申請刪除(基於C++的new機制)

<pre name="code" class="cpp">#include<conio.h> #include<iostream> #include<stdl

C語言二級陣列和二級指標

轉載部落格:https://www.cnblogs.com/zou107/p/4909847.html   一、關於二維陣列和二維陣列區別 (1)一維陣列在記憶體中是連續分佈儲存的,同樣,二維陣列也是在記憶體連續儲存的。所以從記憶體的角度來分析,一維陣列和二維陣列其實沒有本質區

C:numberNMax 陣列中第n大數的下標,方法比較笨,應用二級指標

//求陣列中第n大數的下標 int * numberNMax(int * array, int size, int n) { if (NULL==array) { printf("Pointer is NULL\n"); exit(EXIT_FAILURE);

指標二級指標筆記(C語言)

一級指標 存放地址的變數稱為指標變數,指標變數是一種特殊的變數。 一般變數存放的是資料本身,指標變數存放的是資料的地址。 int a = 1 ; //普通變數 int *p = NULL ; //一個指向空的int型別的指標變數 p = &a;

C/C++二維陣列名和二級指標

轉載自http://blog.csdn.net/wu_nan_nan/article/details/51741030 C/C++二維陣列名和二級指標 原創 2016年06月23日

C++每個節點的右向指標(用二級指標操作指標)

核心就是用二級指標操作指標,現有一個一級指標TreeLinkNode *p1; 二級指標 TreeLinkNode **p2=&p1; 什麼意思呢,就是一級指標取地址後傳遞給二級指標讓他儲存我的地址,不要多想,就是這麼簡單。 好,現在呢單p2這兩個字母,就是一個二級指標了。那麼p

c/c++指標以及二級指標的理解

指標即是用來指向變數地址的一種工具,其本質還是一個變數;   指標和普通變數之間的異同; 1.不同之處:              指標使用來儲存地址的變數,而普通變數則是用來儲存數值的變數,兩者在定義的

C語言筆記15--二級指標

二級指標儲存一級指標的地址,二級指標可以修改一級指標指向的內容,兩者就像是上下級的關係。指標的有著多種變化,在陣列、函式中都有著巨大的作用。 二級指標最大的特點就是有兩個**,定義一個二級指標:int **p; 1.二級指標改變變數的值 #include&

leedcode第26題刪除排序陣列中的重複項——基於c++

RemoveDuplicates::clearDuplicates(vector<int>& nums) { /**方法一:暴力法 * 從前往後遍歷行不通,考慮從後往前遍歷,遇到重複項可以直接length - 1並捨棄。 * 0

c/c++---之用二級指標操作二維陣列

通過二級指標去訪問二維陣列需要先給二級指標分配等同於二維陣列行數的一維陣列指標,然後把二維陣列的每行首地址賦值給對應位置的一維指標上。之後就可以通過二維指標直接訪問了。 參考程式碼如下,可以看具體註釋輔助理解。   #include

學習筆記 c++ (C++ new申請一塊記憶體空間存放二維陣列)

   程式碼: #include<iostream> using namespace std; int main(int argc, char** argv) {     int n=3,m=3;     int count =1;     int

c語言二級指標

二級指標做輸入_第1種記憶體模型 直接利用二級指標 首先看指標陣列(變數為指標) 也就是陣列中存的都是地址 #include<stdio.h> void main() { int i = 0, j = 0; int num = 0; char *myArray[

C語言之二級指標

#include<stdio.h>int main(){ int a=10;            //宣告一個int型變數a int

[原始碼和文件分享]基於C++實現的構建二級檔案模擬系統

1 需求分析 題目:構建二級檔案模擬系統 題目說明:使用一個普通的大檔案(如 c:\myDisk.img ,稱之為一級檔案)來模擬 UNIX V6++的一個檔案卷 一個檔案卷實際上就是一張邏輯磁碟,磁碟中儲存的資訊以塊為單位。每塊 512 位元組。

CPP微軟雜湊表新增刪除方法_二級指標(老師說的)

//vs2017 #include #include “CMap.h” using namespace std; int main() { SStudent sstu[] = { {1,“李四”,95.5}, {2,“lisi”,98}, {3,“aslic”,98}, {1,“李思思

C語言 通過指標二級指標遙控資料

// PointerArray.cpp : 定義控制檯應用程式的入口點。 //vs2015 #include “stdafx.h” #include <stdlib.h> void test1(int* p) { *p = 1; } void test2(int *p,int

乾貨!!c++new和delete工作原理 以及 針對連結串列節點過載operator new 和operator delete 實現連結串列節點使用記憶體池申請和釋放空間

第一部分: new和delete的實現原理 開始談之前我們應該瞭解另一個概念“operator new”和“operator delete”: new操作符呼叫一個函式來完畢必需的記憶體分配,你可以重寫或過載這個函式來改變它的行為。new操

關於C語言中的陣列指標指標陣列以及二級指標

概念解釋 陣列指標:首先它是一個指標,它指向一個數組,即指向陣列的指標;在32 位系統下永遠是佔4 個位元組,至於它指向的陣列佔多少位元組,不知道。陣列指標指向的是陣列中的一個具體元素,而不是整個陣列,所以陣列指標的型別和陣列元素的型別有關。 指標陣列:首先

C語言指標(函式指標陣列,二級指標

int (*p[num])( char*,int,int ); int (*(*p)[num])(int a); 上一篇部落格最後的兩個例子的答案分別是:函式指標陣列,函式指標陣列的指標。 函式指標陣列指標和前面的陣列指標其實沒有太大區別。然後今天主要理一下函式指標陣

關於C語言實現單鏈表為什麼要用二級指標

一級指標作為函式引數可以交換兩個數的值,二級指標作為函式引數可以改變一級指標的值,也就是改變地址。 typedef struct linknode{ char* data; linknode* next }linknode, linklist; 單鏈表中的尾插函式,如果傳入一個一級指標