C++在堆上申请和释放内存 - new & delete

// 动态申请内存, 指向一个未初始化的整型 int *pi = new int;

// pi指向一个整型值,初始化为0 int *pi = new int();

// value of i is 1024 int i(1024);

// pi指向1024 int *pi = new int(1024);

// value of  s is "99999" string s(5, ‘9‘);

// *ps is "999999" string *ps = new string(6, ‘9‘);

/*  只有使用new申请的内存,才能用delete来释放 */

int i = 100; int *pi = &i; double *pd = new double(100);

// error: pi 指向一个局部变量,没有使用new来申请内存 delete pi;

// ok delete pd;

C++在堆上申请和释放内存 - new & delete

时间: 2024-10-15 03:43:39

C++在堆上申请和释放内存 - new & delete的相关文章

/MT、/MD编译选项,以及可能引起在不同堆中申请、释放内存的问题

一.MD(d).MT(d)编译选项的区别 1.编译选项的位置 以VS2005为例,这样子打开: 1)         打开项目的Property Pages对话框 2)         点击左侧C/C++节 3)         点击Code Generation节 4)         右侧第六行Runtime Library项目 2.各个设置选项代表的含义 编译选项 包含 静态链接的lib 说明 /MD _MT._DLL MSVCRT.lib 多线程.Release.DLL版本的运行时库 /

[CareerCup] 13.9 Aligned Malloc and Free Function 写一对申请和释放内存函数

13.9 Write an aligned malloc and free function that supports allocating memory such that the memory address returned is divisible by a specific power of two. EXAMPLE align_malloc (1000,128) will return a memory address that is a multiple of 128 and t

C++ 在堆上开辟与释放二维、三维指针

//C++ 在堆上开辟与释放二维.三维指针 #include<iostream> using namespace std; int main() { //二级指针的开辟与释放 int number = 0; int** p = new int*[4]; for(int i = 0; i < 4; i++) //分级定义数组大小 { p[i] = new int[4]; } for(int i = 0; i < 4; i++) { for(int j = 0; j < 4; j

C++中只在栈上或者堆上申请对象

最近阅读Mitsuba的架构,有一个挺有意思的设计,开始没看明白.搜了下资料才搞懂. 有一个基类Object,它的析构函数是protected访问权限的.并且,所有继承Object的类,都需要实现一个自己的protected的析构函数. Mitsuba还特意解释了,这是为了防止在stack上构建Object的对象. 这是怎么回事呢? ”编译器在为类对象分配栈空间时,会先检查类的析构函数的访问性,其实不光是析构函数,只要是非静态的函数,编译器都会进行检查.如果类的析构函数是私有的,则编译器不会在栈

堆的申请和释放2

我们说过,buf 是栈区中的一个内容. 当func1被调用. 执行Char buf[10]="nihao";的时候. Buf进栈,并被赋值. 当程序结束的时候返回了一个指向buf的地址.的同时buf出栈,里面的内容可能还在,也可能不在.但是给p的地址确实是,当初分配给他的地址.只不过现在指向了新的内容.导致我们看到了这样一个显示结果. /* 这是因为p指向的地址在那一瞬间,交付给其他程序,其他程序完成改写.再次释放了此处地址,又被p指向. 有两个否则: 第一个否则发生在,如果没有交给其

堆的申请和释放

#include <stdio.h> void func1(void); void func2(void); void func3(void); void func4(void); int main(int argc, char ** argv){ func4(); getchar(); return 0; } /** malloc跟 calloc之间的区别 */ void func4(void){ char *p1 = NULL; p1 = malloc(sizeof(char)* 10);

天生棋局(堆上申请二维空间的应用)

1 #include <stdio.h> 2 #include <stdlib.h> 3 /* 4 天生棋局 5 */ 6 #define N 10 7 //1.传入一个n在堆空间中产生n*n方格的棋盘(生成一个n*n的二维空间) 8 int **createboard(int n) 9 { 10 int **p = (int **)malloc(n*sizeof(int*)); 11 for(int i = 0;i<n;i++) 12 { 13 p[i] = (int *)

堆上申请数组

方法一:通过数组指针申请连续的空间 #include <stdio.h> 2 #include <stdlib.h> 3 int main() 4 { 5 // 申请a[3][2]三行两列二维数组 6 int (*a)[2] = (int(*)[2])malloc(sizeof(int)*3*2); 7 a[0][0] =1; 8 a[0][1] =2; 9 a[1][0] =3; 10 a[1][1] = 4; 11 a[2][0] =5; 12 a[2][1] = 6; 13

System.New、System.Dispose - 为某个指针申请和释放内存

http://www.cnblogs.com/del/archive/2008/03/27/1125718.html