
指针
文章平均质量分 71
luckyone906
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
c++中delete初始化未分配定义的内存会崩溃吗?
在C++中,对未分配的栈内存使用delete操作符会导致未定义行为(UB),这是极其危险的操作。一定会导致未定义行为,通常引发程序崩溃。/**********************在c++中,函数中执行char* sendBuf;⚠️ 关键结论:对未初始化的栈指针执行delete[]是致命错误,崩溃不可避免。/***********************************c++中delete初始化未分配的栈内存。栈和堆内存的根本区别在于管理方式:栈自动回收,堆需手动管理。原创 2025-07-25 10:36:37 · 417 阅读 · 0 评论 -
c++中通过new或mallooc数组分配的空间是是否连续?
内存碎片问题:多次调用 new/malloc 分配的多个数组之间地址不连续,因为堆通过链表管理空闲内存,每次分配可能从不同位置获取内存块24。虚拟连续与物理连续:操作系统可能通过分页机制将物理不连续的内存映射为虚拟连续地址,但对开发者透明,逻辑上仍视为连续47。// 分配连续内存块,长度 100*sizeof(int)数据结构特性:数组在逻辑和物理层面均要求连续存储,这是其支持随机访问(如 arr[i])的基础68。// 堆数组,地址连续。// 地址 0x1000。// 栈数组,地址连续。原创 2025-05-08 17:01:22 · 387 阅读 · 0 评论 -
c++中堆空间创建数组内存是连续的吗?
原创 2025-05-08 16:52:16 · 122 阅读 · 0 评论 -
c++中栈内存和堆内存的分配方法和区别
堆内存 手动分配:通过 new/malloc 等操作显式申请,需匹配 delete/free 释放27 cpp<br>void func() {<br> int* p = new int[100];// 手动释放<br>}2. 动态分配(非标准):使用 alloca 函数调整栈指针6 cpp<br>void func() {<br> int a;// 自动分配<br> int* p = (int*)alloca(100);// 动态分配<br>} // 自动释放<br>原创 2025-04-25 21:14:50 · 673 阅读 · 0 评论 -
C++中函数调用机制,返回机制,返回类型及堆栈内存区别详解
堆内存:程序员向操作系统申请一块内存,当系统收到程序的申请时,会遍历一个记录空闲内存地址的链表,寻找第一个空间大于所申请空间的堆结点,然后将该结点从空闲结点链表中删除,并将该结点的空间分配给程序。但是,这是不可预测的,并且是不安全的。然而,由于你返回了指向它的指针,你仍然可以通过这个指针访问它的内存位置(尽管这是未定义行为,因为b已经不再是一个有效的对象)。上面的两条return 语句都将返回未定义的值,也就是说,试图使用返回值将引发未定义的行为,对于第一条return语句来说,显然它返回局部对象的引用。原创 2024-10-24 21:27:12 · 995 阅读 · 0 评论 -
形参和返回参数的传递概念解析
1.//形参变量是函数进入时在栈上分配的(参数被拷贝到形参变量所在的栈内存上,所以形参改变值只是改变了实际参数的备份并不影响函数外的实际参数;只有传送指针等引用传递的参数才能影响实参变量的值),函数结束后被释放。2.Settings settings = Settings[SelectedIndex];//这是引用传递,settings取的是指针变量里的值,相当于引用传递,指针变量里存的是类对象的地址,指针变量根据系统不同是4个或8个字节空间。/**********************原创 2024-10-24 21:22:02 · 1153 阅读 · 0 评论 -
c++中堆、栈内存分配详解
堆:首先应该知道操作系统有一个记录空闲内存地址链表,当系统收到程序申请时,会遍历该链表,寻找第一个空间大于所申请空间堆结点,然后将该结点从空闲结点链表中删除,并将该结点空间分配给程序,另外,对于大多数系统,会在这块内存空间中首地址处记录本次分配大小,这样,代码中delete语句才能正确释放本内存空间。同时栈是线程独立的,每个线程都有自己的栈。例子1 ----------------------------------------------------------------------------转载 2024-10-24 21:11:00 · 754 阅读 · 0 评论 -
函数形参和实参的传递机制及内存分配的理解
形参变量是函数进入时在栈上分配的(参数被拷贝到形参变量所在的栈内存上,所以形参改变值只是改变了实际参数的备份并不影响函数外的实际参数;只有传送指针等引用传递的参数才能影响实参变量的值),函数结束后被释放。原创 2024-09-15 09:35:48 · 207 阅读 · 0 评论 -
C++和C#在内存处理上的比较
C#与C++内存管理的比较(【出处】http://blog.csdn.net/hardwayboy/article/details/4499242)1、总述C#最大的一个改进其实就是对内存访问与管理方法的改进。在.NET中内存的管理是全权委托给垃圾回收器,由垃圾回收器来决定何时该释放内存空间。现在普遍采用两种技术来释放程序动态申请的系统内存:首先是以C++为代表的必须以手工方式使应用程序代码完成这些工作,让对象维护引用计数。然后是以.NET以及Java使用的垃圾回收器来完成内存释放工作。在C++原创 2024-09-15 09:32:34 · 1293 阅读 · 0 评论 -
解决C++开发中的内存碎片问题的几种方式
内存碎片指的是已分配的内存块在使用过程中出现断开的情况,导致可分配的连续内存空间变少,从而影响程序的性能和稳定性。通过使用内存池,可以避免频繁的内存分配和释放,从而减少内存碎片的产生。在C++中,内存碎片是指可用内存空间的分割,它导致即使有足够总量的空闲内存,也可能无法满足较大内存块的分配请求。1.对象池:通过预分配一定数量的对象内存,然后自己管理内存池的分配和释放,可以减少对系统内存的频繁申请和释放。/**************************解释C++中的内存碎片及其影响。原创 2024-08-18 11:13:41 · 1473 阅读 · 0 评论 -
c++中在堆上创建数组
i == 10 的时候,数组下标范围是0~9,并没有a[10]这个元素,所以程序会导致越界,其结果是未定义的(不确定的)。堆数组,就是指一次性从堆内存分配连续的多个无名变量(也叫元素),这些变量(元素)的地址前后紧挨在一起。下面的代码创建了10个连续存放的无名整型变量(元素),其中第一个变量的地址是a。为了使用这些连续的无名变量(元素),数组使用下标(索引,中括号)来访问这些元素。注意:a[9]是最后一个元素,因为下标是从0,而不是1开始的。注意看第一个元素的下标是0,第10个元素的下标是9。原创 2024-08-18 11:09:48 · 363 阅读 · 0 评论 -
汇编基础知识-寄存器
IP是专用寄存器,具有自动增量的能力,处理完一条指令,IP的值就加上该指令的字节数,从而指向下一条指令,实现程序的顺序执行。CF(进位标志)、PF(奇偶标志)、AF(调整标志)、ZF(零标志)、SF(符号标志)、OF(溢出标志)(4)没有合适的高级语言或只能采用汇编语言时,如开发最新的处理器程序、暂时没有支持新指令的编译程序。(2)执行:将指令代码翻译成它代表的功能(译码),并发出有关控制信号实现这个功能。(1)原码——最高有效位表示符号(正0负1),其它位直接表示数值大小。bp寄存器默认是SS。原创 2024-06-01 22:26:59 · 1668 阅读 · 0 评论 -
C语言指针是什么?彻底理解C语言指针的概念
当程序被加载到内存后,操作系统会给不同的内存块指定不同的权限,拥有读取和执行权限的内存块就是代码,而拥有读取和写入权限(也可能只有读取权限)的内存块就是数据。需要注意的是,虽然变量名、函数名、字符串名和数组名在本质上是一样的,它们都是地址的助记符,但在编写代码的过程中,我们认为变量名表示的是数据本身,而函数名、字符串名和数组名表示的是代码块或数据块的首地址。( )表示取值操作,整个表达式的意思是,取出地址 0X1000 和 0X2000 上的值,将它们相加,把相加的结果赋值给地址为 0X3000 的内存。原创 2024-05-01 20:45:11 · 391 阅读 · 0 评论 -
C语言指针变量的定义和使用详解(精华)
上节我们说过,CPU 读写数据必须要知道数据在内存中的地址,普通变量和指针变量都是地址的助记符,虽然通过 *p 和 a 获取到的数据一样,但它们的运行过程稍有不同:a 只需要一次运算就能够取得数据,而 *p 要经过两次运算,多了一层“间接”。值得注意的是,p_a 需要的一个地址,a 前面必须要加取地址符&,否则是不对的。*&a可以理解为*(&a),&a表示取变量 a 的地址(等价于 pa),*(&a)表示取这个地址上的数据(等价于 *pa),绕来绕去,又回到了原点,*&a仍然等价于 a。原创 2024-05-01 20:43:43 · 142 阅读 · 0 评论 -
C语言指针数组详解(数组每个元素都是指针)
parr 是指向数组 arr 的指针,确切地说是指向 arr 第 0 个元素的指针,它的定义形式应该理解为int *(*parr),括号中的*表示 parr 是一个指针,括号外面的int *表示 parr 指向的数据的类型。第二个 printf() 语句中,parr+i 表示第 i 个元素的地址,*(parr+i) 表示获取第 i 个元素的值(该元素是一个指针),**(parr+i) 表示获取第 i 个元素指向的数据。为了便于理解,可以将上面的字符串数组改成下面的形式,它们都是等价的。原创 2024-05-01 20:42:08 · 341 阅读 · 0 评论 -
C语言函数指针(指向函数的指针)详解示例演示
一个函数总是占用一段连续的内存区域,函数名在表达式中有时也会被转换为该函数所在内存区域的首地址,这和数组名非常类似。我们可以把函数的这个首地址(或称入口地址)赋予一个指针变量,使指针变量指向函数所在的内存区域,然后通过指针变量就可以找到并调用该函数。参数列表中可以同时给出参数的类型和名称,也可以只给出参数的类型,省略参数的名称,这一点和函数原型非常类似。注意( )的优先级高于*,第一个括号不能省略,如果写作returnType *pointerName(param list);//返回两个数中较大的一个。原创 2024-05-01 20:40:54 · 368 阅读 · 0 评论 -
C语言指针的总结详解(1)
程序在运行过程中需要的是数据和指令的地址,变量名、函数名、字符串名和数组名在本质上是一样的,它们都是地址的助记符:在编写代码的过程中,我们认为变量名表示的是数据本身,而函数名、字符串名和数组名表示的是代码块或数据块的首地址;5) 数组也是有类型的,数组名的本意是表示一组类型相同的数据。2) 给指针变量赋值时,要将一份数据的地址赋给它,不能直接赋给一个整数,例如int *p = 1000;p 可以指向 int 类型的数据,也可以指向类似 int arr[n] 的数组。定 义 含 义。原创 2024-05-01 20:39:15 · 192 阅读 · 0 评论 -
c++ 中return返回值与内存的分配释放详解
c++原创 2023-01-11 22:16:16 · 4994 阅读 · 0 评论 -
c++中值类型数组和引用数组的区别
c++原创 2022-12-28 22:18:38 · 868 阅读 · 1 评论 -
C++中delete 和 delete []的真正区别
c++原创 2022-12-24 14:35:42 · 6691 阅读 · 1 评论 -
c语言-彻底理解C语言指针的概念
c++原创 2022-12-15 21:29:46 · 495 阅读 · 0 评论 -
C语言二级指针-指向指针的指针详解
c++原创 2022-12-15 21:18:53 · 209 阅读 · 0 评论 -
c++中返回参数为引用时不能是在栈中分配的(必须在堆中创建这样内存是手动释放,而栈中因为函数结束会自动释放栈中的内存)
c++原创 2022-11-25 15:13:09 · 559 阅读 · 0 评论 -
c++中引用、指针、值的区别与用途详解
c++原创 2022-11-25 14:16:27 · 965 阅读 · 0 评论 -
C++中值传递、指针传递和引用传递的比较详解
c++原创 2022-11-25 14:05:38 · 308 阅读 · 0 评论 -
C++中返回引用和返回值的区别详解(1)
c++原创 2022-11-25 14:00:23 · 712 阅读 · 0 评论 -
c++中指针,堆栈内存分配重要概念理解汇总(实例注释)
c++原创 2022-11-20 10:15:10 · 2134 阅读 · 0 评论 -
c++中指针概念及指针变量的大小
c++原创 2022-11-20 09:55:46 · 1060 阅读 · 0 评论 -
c++中内存堆栈的创建与回收
c++原创 2022-11-20 09:38:38 · 741 阅读 · 0 评论 -
C++程序内存分配方式概念与区别(堆与栈)
c++原创 2022-11-19 19:45:35 · 387 阅读 · 0 评论 -
C++中函数调用的整个过程内存堆栈分配详解
c++原创 2022-11-18 22:26:37 · 4178 阅读 · 0 评论 -
C++中运行一个程序的内存分配情况及qt中的内存管理机制
c++原创 2022-11-10 18:57:50 · 2691 阅读 · 0 评论 -
C++中HANDLE句柄的概念
c++原创 2022-11-10 18:30:40 · 2487 阅读 · 0 评论 -
C++释放指针时提示Invalid address specified to RtlFreeHeap解决办法(堆栈中分配时多分配一些空间再释放)
c++原创 2022-10-15 16:59:21 · 2451 阅读 · 0 评论 -
qt中其他线程的信号向异步线程的槽传指针与释放指针问题
c++原创 2022-10-15 15:27:56 · 936 阅读 · 1 评论 -
qt中信号槽传指针到工作线程,在工作线程释放传递过来的指针
c++原创 2022-11-11 18:38:42 · 472 阅读 · 0 评论 -
C++中创建二维数组的几种方法
c++原创 2022-09-24 22:16:53 · 4157 阅读 · 0 评论 -
qt C++中指针自动释放内存及程序中的内存操作、管理
c++原创 2022-11-12 09:16:45 · 5196 阅读 · 0 评论 -
C++:delete和delete[]释放内存的区别
c++原创 2022-11-12 09:17:49 · 1554 阅读 · 0 评论 -
C++中对象的动态建立与释放详解
我们知道可以用new运算符可以动态的分配内存,用delete运算符可以释放这些内存。当我们使用new运算符动态的分配一个内存之后,会自动返回一个该内存段的起始地址,也就是指针。=============下面先给出一个new和delete基本应用的例子,回顾一下它的基本用法============复制代码代码如下:#include<iostream>using namespace std;int main(){int *p;//定义一个指向int型变量的指针pp=n..原创 2022-05-15 19:46:36 · 2031 阅读 · 0 评论