C/C++中的分配内存初始化(new和malloc)

2023-11-07

1、new和delete以及new[]和delete[]


#include<iostream>
using namespace std;
int  main() {
	int* p1 = new int;//动态分配一个4字节(int)空间
	int* p2 = new int(10);//动态分配一个4字节(一个int)的空间,并初始化为10。
	int* p3 = new int[10];//动态分配40个字节(10个int)的空间。
 
	delete p1;
	delete p2;
	delete[] p3;
 
	return 0;
}

通过上述的代码,就是说明了C++在使用new时常用的三种方式, //2020.7.14

int *p = new int  //new  数据类型

int *p = new int (10);//new 数据类型(初始值)

int *p = new int [100]; //new 数据类型[常量表达式]

2、malloc和free的使用

首先使用malloc函数的函数的时候需要加上头文件#include <malloc.h>

#include <iostream>
#include<malloc.h>

using namespace std;
int main()
{
    //[1]给指针申请内存
    char *p = (char *)malloc(100);//申请一块内存,然后再释放
    free(p);

    //[2]较多的用法
    int *p1 = (int*)malloc(sizeof(int));
    *p1 = 10;
    printf("%d\n", *p1);
   
    //[3]申请int型的指针变量内存
    int* b = (int*)malloc(sizeof(int)*4);
    return 0;
}

参考博客:C++ 动态内存管理(new /delete-new[]/delete[]-N次释放)_porryCn的博客-CSDN博客_new 什么时候释放

参考博客:C语言指针之二malloc的用法及详解_修炼之路-CSDN博客_malloc函数用法

c++学习之概述--从C到C++_OrangeRen-CSDN博客

注意:关于malloc的增加内容//2022.2

关于malloc的内存申请上述分配内容是有问题的,具体可以参考博客:c语言之内存的申请malloc() 和释放free() - stevenwuzheng - 博客园

指出两点问题:

1、malloc申请内存有可能不成功,所以需要增加判断 ,必须使用if(NULL!=p)语句来验证内存确实分配成功了

2、当free掉p之后,变成野指针的p,需要将它设置成p = NULL,这样才能防止野指针带来的问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C/C++中的分配内存初始化(new和malloc) 的相关文章

  • 如何使用C从http下载文件?

    最近几天我试图弄清楚如何从 URL 下载文件 这是我对套接字的第一个挑战 我用它来了解协议 所以我想在没有 cURL 库的情况下只用 C 语言来完成它 我搜索了很多 现在我可以打印页面的源代码 但我认为这与文件不同 我不必只将接收到的数据从
  • 与 MinGW 的静态和动态/共享链接

    我想从一个简单的链接用法开始来解释我的问题 假设有一个图书馆z它可以编译为共享库 libz dll D libs z shared libz dll 或静态库 libz a D libs z static libz a 让我想要链接它 然后
  • SOAP Web 服务:多台服务器,一个接口

    我有一个场景 需要任意数量的服务器来提供相同的 SOAP Web 服务 我想生成一组代理类 并能够为它们提供一个位置 以便在运行时将它们指向不同的服务器 不幸的是 看起来好像wsdl port节点 子节点wsdl service 要求对特定
  • 无法在 CUDA 中找到 1 到 100 数字的简单和?

    我正在研究使用 CUDA 的图像处理算法 在我的算法中 我想使用 CUDA 内核找到图像所有像素的总和 所以我在cuda中制作了内核方法 来测量16位灰度图像的所有像素的总和 但我得到了错误的答案 所以我在cuda中编写了一个简单的程序来查
  • 如何使用T4从一个模板同时生成两个文件?

    我遇到的情况是 我需要生成两个 CSharp 代码文件 它们的代码几乎相同 但方法的输入和输出类型的命名空间不同 事实上 每个文件都针对特定国家 地区 并且类型来自特定国家 地区的 WSDL 我正在围绕服务编写一些包装器 逻辑完全相同 但从
  • 如何以编程方式删除受信任的根证书颁发机构中的证书?

    我需要能够从组织中的每台电脑中删除特定的证书 是的 我可以逐个座位 但我要到周四才能完成 而且我没有人力逐个座位 是否有使用 C 的编程方式来执行此操作 我认为你不需要编写任何 C 看看certmgr exe del http msdn m
  • Visual Studio 2013 调试器显示 std::string 的奇怪值

    我有一个大型的 cmake 生成的解决方案 其中包含许多项目 由于某种原因 我无法查看字符串的内容 因为根据调试器 Bx Buf含有一些垃圾 text c str 正确返回 Hello 该问题不仅仅发生在本地字符串上 返回的函数std st
  • Windows Phone 7 - ScrollViewer 值已更改

    我一直在寻找解决方案 但无法找到正确的解决方案 我的网格宽度为 960 并且有ScrollViewer在里面 现在我想知道滚动时滚动的值 水平偏移 我找到的所有解决方案都是针对 wpf silverlight 的 它对我不起作用 Edit
  • 维护 VS Test Project 中单元测试方法之间的上下文

    我想按顺序运行以下单元测试 使用随机数字的名称 密码等创建新客户 检索刚刚创建的客户并断言其属性包含相同的随机数 对同一用户调用 ForgotPassword 函数 并使用相同的随机数作为用户名 清楚地看到 我需要生成一次随机数 并在 3
  • 注入包含接口的所有已注册实现的 Enumerable

    给出以下接口 public interface IMyProcessor void Process 我希望能够注册多个实现 并让我的 DI 容器将它们的可枚举注入到这样的类中 public class MyProcessorLibrary
  • 如何在 C 中链接目标文件?失败并显示“架构 x86_64 的未定义符号”

    因此 我尝试在我的文件 file2 c 中使用另一个 C file1 c 文件中定义的函数 为了做到这一点 我包含了 file1 file1 h 的标头 但是 每当我尝试使用 gcc 编译文件时 我都会收到以下错误 Undefined sy
  • X 轴和 Z 轴上的 Quaternion.Slerp,无 Y 轴

    I am trying to rotate the Player about X Y and Z axis The Y axis should not move from last angle Example if I rotate 45
  • 为什么连续抛出 2 个异常不会生成无法访问的代码警告?

    为什么以下代码行不会创建编译器警告 void Main throw new Exception throw new Exception 据我所知 编译器应该通知您无法到达第二个抛出异常 这显然是一个编译器错误 它是在 C 3 0 中引入的
  • main.cpp 是必需的吗?

    我试图编译一个程序cmake 我最终删除了我的main cpp文件 我刚刚将其复合到另一个包含我的项目名称的文件中 即 我刚刚将主函数剪切并粘贴到该文件中 问题是我有一个main cpp未发现错误 不确定是否在C 一个名为main cpp是
  • 从单应性估计 R/T

    我一直在尝试计算 2 个图像中的特征 然后将这些特征传递回CameraParams R没有运气 特征已成功计算并匹配 但是问题是将它们传递回R t 我明白你必须分解Homography为了使这一点成为可能 我已经使用如下方法完成了 http
  • 具有多个父项的 Qt 树模型

    我想构建一棵树 其中一个元素可以引用另一个元素 我想要构建的树是 像这样的东西 A B C D E F P this is a pointer to C D first child of C E second child of C I fo
  • C# 多维数组解析

    我有一个多维数组 内容在调试器中看起来像这样 数组设置为 String s new String 6 4 A B Yes C A B Yes C A B No C A B Yes C A B Yes C A B Yes C A B No C
  • 为什么存在系统调用

    我一直在阅读有关系统调用及其在 Linux 中如何工作的内容 我还有更多的阅读要做 但我读过的一件事都没有回答 那就是 为什么我们需要系统调用 我知道系统调用是用户空间程序要求内核执行某些操作的请求 但我的问题基本上是 为什么用户空间程序本
  • 跟踪白色背景中的白球(Python/OpenCV)

    我在 Python 3 中使用 OpenCV 来检测白场上的白 黑球 并给出它的精确 x y 半径 和颜色 我使用函数 cv2 Canny 和 cv2 findContours 来找到它 但问题是 cv2 Canny 并不总是检测到圆的完整
  • 如何配置 qt Creator 以显示 C++ 代码而不是反汇编程序?

    昨天我做了很多事情 比如更新 GCC Clang 和重新安装 Qt Creator 今天 在逐步调试我的代码时 调试器显示的是反汇编代码 而不是我编写的 C 代码 紧迫F10 or F11 调试器正在进入汇编代码而不是 cpp nor h我

随机推荐

  • Python学习-----起步2(变量与转义符)

    目录 前言 Python变量 常量使用规则 基本数据变量类型 整形 int 浮点型 float 字符串类型 str 布尔类型 bool 转义符 习题 前言 在我们学习C语言时 我们学了很多种类型的变量 有int char float dou
  • JDK版本导致Unsupported major.minor version 52.0 error

    出现问题原因 gt gt 分析 JDK版本不一致的问题 在eclipse中开发的项目有个Java build path中可以配置的JDK java compiler中可以配置compiler level eclipse gt windows
  • Docker客户端的常用命令

    搬运地址 启动Docker systemctl start docker 帮助命令 docker版本 docker version docker信息 docker info 帮助文档 docker help 此命令会列出所有Docker命令
  • Vue 中渲染字符串形式的组件标签

    在vue中如果要渲染字符串形式的标签 vue 提供了 v html 指令 可以很方便的渲染出来 但是如果这个标签是一个组件 或者element ui 的组件时 就不能解析出来了 因为v html 只能解析原生的属性 那么就要使用jsx渲染来
  • VS2005发布网站时生成的DLL名称问题

    VS2005发布网站时不会像VS2003一样生成规则的DLL文件 而生成的DLL文件名含有随机数且不能一个项目生成一个DLL文件 让人有一些遗憾 为了做到像vs2003一样 微软发布了WebDeployment Project插件可解决此问
  • 【STM32】端口复用和重映像

    作者 一只大喵咪1201 专栏 STM32学习 格言 你只管努力 剩下的交给时间 端口复用和重映像 描述 端口复用 端口复用的配置过程 端口重映像 部分重映像和完全重映像 重映像的配置过程 总结 描述 先来看一张STM32的简易结构图 在图
  • 程序员须学计算机语言,IT程序员入门必须要学会的是什么?

    IT程序员入门必须要学会的是什么 入门需要具备一定的英语基础 计算机体系结构和汇编语言 计算机操作系统原理 数据结构和算法 软件工程 Windows程序设计等相关知识点 一 具备一定的英语基础 对于初级程序员来说 英语只需要写简单的词汇就可
  • QT---FTP练习,连接FTP服务器,浏览其中的文件,下载到本地目录中

    include mainwindow h include ui mainwindow h include include include include include MainWindow MainWindow QWidget paren
  • 手机定位浅析 AGPS定位 LBS基站定位 卫星定位

    手机定位是指通过特定的定位技术来获取移动手机或终端用户的位置信息 经纬度坐标 在电子地图上标出被定位对象的位置的技术或服务 定位技术有两种 一种是基于GPS的定位 一种是基于移动运营网的基站的定位 基于GPS的定位方式是利用手机上的GPS定
  • Ubuntu rc.local 的开启与配置

    目录 rc local 简介 rc local 的配置流程 rc local 服务的管理 rc local 服务显示状态 rc local 服务的启动 rc local 服务的停止 rc local 服务使能 gt 开机依旧生效 rc lo
  • 如何在 Cockpit 中管理虚拟机

    Cockpit 是一个很将整个服务器置于一个集中的控制面板中 并对它们进行相当程度的控制 还可以在Cockpit中创建和管理虚拟机 环境 Centos8 安装Cockpit 要使用 Cockpit 创建和管理虚拟机 必须在运行 Cockpi
  • Web前端学习:JavaScript基础 【HTML DOM操作】

    目录 一 认识DOM Document 二 查找HTML元素 1 查找HTML元素的方式 以id查找HTML元素为例 编辑 window onload方法 三 DOM 常用事件 1 DOM常用事件表 2 DOM 常用事件的用法 以oncli
  • 音视频技术学习博客

    云天之巅 http blog yundiantech com log blog 音视频同步 https blog csdn net myvest article details 97416415
  • 查看docker日志的方法

    查看docker日志的几种方法 1 实时查看日志 2 查看某一段的日志 3 容器是否启动成功 4 查看某个日期至今的所有日志 并持续打印 docker logs OPTIONS CONTAINER OPTIONS说明 f 跟踪日志输出 si
  • MySQL数据库增添改删数据

    DDL 表结构 create alter drop DML 表内容 insert update delete 添加 修改 删除 DQL select from 表名 代表所有的字段 投影操作 select from 表名 where id
  • 有意思的可变数组依据tomcat生命周期的lifeSupport

    依据tomcat源码中的LifecycleSupport addLifecycleListener package com array public class ArrayTest private static String str1 ne
  • Node.js vs PHP-哪一个更适合2021年?

    无论何时我们要开始一些业务 最主要的关注是选择最好的编程语言 它可以同时构建高性能和可伸缩性的项目 有时候 你会陷入两种语言之间 很难找到最好的一种语言 选择最佳的编程工具对于企业的成功是非常重要的 您需要选择最好的编程语言 同时开发和设计
  • centos部署vue项目

    https www cnblogs com alvin niu p 9502286 html
  • DBeaverUltimate中文多连接数据库SQL 编辑查询

    DBeaverUltimate是很受欢迎的数多连接据库管理工具 对于目前比较流行的数据库都是可以使用的 专业人士也可以使用DBeaverUe使用 而且无论是MySQL还是SQLite 亦或者是PostgreSQL Oracle Micros
  • C/C++中的分配内存初始化(new和malloc)

    1 new和delete以及new 和delete include