指针内存问题。 关于内存释放的。

问题描述

指针内存问题。 关于内存释放的。

下面的代码中,按道理说是内存消耗剧增。 可是在加了cout输出之后就不会增加. 这是为什么

 #include<iostream>
using namespace std;

int main()
{
    while(true)
    {
        int *p=new int(1000000000);
        cout<<"hello !"<<endl;
    }
    return 0;
}

解决方案

应该是编译器优化掉了,或者内存分配是懒惰的,你加上
p[1000000000-1]=10;
程序一次循环都不运行就挂了。

解决方案二:

有可能是内存申请失败了,请申请后先判断一下 p 是否为空、看看申请是否成功了。

解决方案三:

p是否为空,估计后面没有分配内存了。

时间: 2024-11-10 01:11:09

指针内存问题。 关于内存释放的。的相关文章

heapfree-结构体中的指针指向申请的内存空间,delete结构体变量前必须要释放吗?

问题描述 结构体中的指针指向申请的内存空间,delete结构体变量前必须要释放吗? 593行是必须的吗?解释下要或不要的原因. 解决方案 肯定需要啊,delete结构体指针,默认只会释放在结构体中直接声明的变量,对于new或者malloc出来的指针需要手动释放,而在实际的开发中为了方便, 我们常常将对结构体中指针的释放放在结构体的析构函数的,当然 像你这种用户也是没有问题的. 解决方案二: 进程退出会被OS自动释放所有的进程相关的空间,但是这样不是很正确,因为从代码角度有内存泄漏,比如你的程序如

Android For JNI(四)——C的数组,指针长度,堆内存和栈内存,malloc,学生管理系统

Android For JNI(四)--C的数组,指针长度,堆内存和栈内存,malloc,学生管理系统 好几天每写JNI了,现在任务也越来越重了,工作的强度有点高,还有好几个系列的博客要等着更新,几本书还嗷嗷待哺的等着我去看,github上的两个散漫的开源,基础入门的视频也在录制,还要学习新的知识, 都是一种挑战,不知道为何,最近懒散了,看来还得再加把劲,今天我们继续延伸一下C的一些小知识 一.数组 C的数组和JAVA也是类似的,我们写一段小程序 #include <stdio.h> #inc

c语言中内存的分配与释放的例子

首先我们来科普一下: 什么是堆?说到堆,又忍不住说到了栈!什么是 栈? 1.什么是堆:堆是大家共有的空间,分全局堆和局部堆.全局堆就是所有没有分配的空间,局部堆就是用户分配的空间.堆在操作系统对进程 初始化的时候分配,运行过程中也可以向系统要额外的堆,但是记得用完了要还给操作系统,要不然就是内存泄漏. 2.什么是栈:栈是线程独有的,保存其运行状态和局部自动变量的.栈在线程开始的时候初始化,每个线程的栈互相独立.每个函数都有自己的栈,栈被用来在函数之间传递参数.操作系统在切换线程的时候会自动的切换

释放动态申请数组内存-C++中动态申请的数组内存异常时内存释放问题

问题描述 C++中动态申请的数组内存异常时内存释放问题 在C++的一个方法中动态申请了一段数组的内存,还未通过delete[] 语句释放这段内存,方法异常,此时代码不会执行后面的delete[] 语句了,那么前面申请的这段数组内存怎么释放? C++中的auto_prt只支持单个对象动态内存的管理,对于数组动态申请的内存怎么管理? 解决方案 应该在运行期系统自动帮你归还,前提是你的数组是由class构成,但不是内置类型.详见EFFECTIVE C++第三版条款52(写了placement new也

set nterval-IE6中使用setInterval定期刷新Fusioncharts导致IE内存持续升高不能释放

问题描述 IE6中使用setInterval定期刷新Fusioncharts导致IE内存持续升高不能释放 贴出代码: var myChart1 = null; //分税种 var fsz = function() { result = ajax_comm("com.digitalchina.jkpt.web.WelcomeWebService","queryFsz",{date:yearMonth}); //alert(result.xml) myChart1 =

linux驱动开发--内核空间中内存的申请与释放

1.Linux内存管理 linux内存最小管理单位为页(page),通常一页为4kb. linux系统中,在初始化时,内核为每个物理内存页建立一个page的管理结构,操作物理内存时实际上就是操作page页. 物理地址:出现在cpu地址总线上的寻址物理内存的地址信号,是地址变换的最终结果. 线性地址(虚拟地址):在32位cpu架构上,可以表示4G的地址空间,也就是0x00000000-0xFFFFFFFF. 逻辑地址:实际上是一个相对地址,是程序代码经过编译之后在汇编程序中出现的地址. linux

c语言指针及malloc申请内存问题

问题描述 c语言指针及malloc申请内存问题 int** generate(int numRows, int** columnSizes, int* returnSize) { //if(numRows==0) int **result=NULL; for(int i=0;i<numRows;i++) { result[i]=(int *)malloc(sizeof(int)*i); for(int j=1;j<i;j++) result[i][j]=result[i-1][j-1]+res

exchange-c语言指针及malloc申请内存问题

问题描述 c语言指针及malloc申请内存问题 void exchange(float *p ,float *q){ float a = *p; *p = *q; *q = a; } float a = 0; float b = 0; printf("请输入a = "); scanf("%f",&a); printf("请输入b = "); scanf("%f",&b); exchange(&a, &a

C语言创建链表错误之通过指针参数申请动态内存实例分析_C 语言

本文实例讲述了C语言创建链表中经典错误的通过指针参数申请动态内存,分享给大家供大家参考之用.具体实例如下: #include <stdio.h> #include <stdlib.h>// 用malloc要包含这个头文件 typedef struct node { int data; struct node* next;// 这个地方注意结构体变量的定义规则 } Node; void createLinklist(Node* pHder, int length) { int i =

Java中的堆内存与栈内存分配浅析

Java 把内存划分成两种:一种是栈内存,另一种是堆内存.在函数中定义的一些基本类型的变量和对 象的引用变量都是在函数的栈内存中分配,当在一段代码块定义一个变量时,Java 就在栈中为这个变量 分配内存空间,当超过变量的作用域后,Java 会自动释放掉为该变量分配的内存空间,该内存空间可以 立即被另作它用. 堆内存用来存放由 new 创建的对象和数组,在堆中分配的内存,由 Java 虚拟机的自动垃圾回收器来 管理.在堆中产生了一个数组或者对象之后,还可以在栈中定义一个特殊的变量,让栈中的这个变量