数组不初始化带来的问题及解决、动态分配

news2024/9/25 13:24:58

在这里插入图片描述

C++中数组不初始化会输出什么结果

在C++中,如果你声明了一个数组但没有对其进行初始化,数组的元素将具有未定义的值。这意味着数组元素的值是不确定的,可能是垃圾值

当你访问未初始化的数组元素时,可能会得到以下结果:

随机值:未初始化的数组元素可能包含之前内存位置上的任意值,这些值可能是随机的、垃圾的或者是之前存储在该内存位置上的其他数据。

可能发生未定义行为:在C++中,访问未初始化的数组元素属于未定义行为,这意味着程序的行为是不可预测的。它可能导致崩溃、错误的结果或其他意想不到的行为。

为了避免未定义的行为和潜在的问题,最好在使用数组之前对其进行明确的初始化操作,将其元素设置为特定的值或赋予所需的初值。例如,可以使用循环或使用初始化列表在声明数组时进行初始化。

解决办法

在这里插入图片描述

动态分配一维数组

malloc-free

#include <iostream>
#include<stdlib.h> //该头文件为malloc必须 
using namespace std;
 
int main()
{
	int len;
	int *p; 
	cout<<"请输入开辟动态数组的长度:"<<endl;
	cin>>len;
	//长度乘以int的正常大小,才是动态开辟的大小 
	p = (int*)malloc(len*sizeof(int));
	cout<<"请逐个输入动态数组成员:"<<endl;
	for(int i=0; i<len; ++i)
	{
		//此处不可以写成:cin>>*p[i] 
		cin>>p[i];
		cout<<p[i]<<" ";
	}
	//时刻记住:有malloc就要有free 
	free(p);
 } 

“new-delete”

#include <iostream>
using namespace std;
 
int main()
{
	int len;
	cout<<"请输入开辟数组的长度:"<<endl;
	cin>>len; 
	int *p = new int [len];
	//数据输入
	for(int i=0; i<len; ++i)
	{
		cin>>p[i];
		cout<<p[i]<<" ";
	 } 	 
	//释放内存:
	delete []p; 
 } 

动态分配二维数组

malloc-free

#include <iostream>  
#include<stdlib.h> //该头文件为malloc必须   
using namespace std;  
  
int main()  
{  
    int row,col;  
    int **p;   
    cout<<"请输入开辟动态数组的行 & 列:"<<endl;  
    cin>>row>>col; 
	p = (int**)malloc(row*sizeof(int*));//为数组的行开辟空间   
	for(int i=0; i<row; ++i)  
	{  
	    *(p+i)=(int*)malloc(col*sizeof(int));//为数组的列开辟空间   
	}  
	//输入成员   
	cout<<"请逐个输入动态数组 各行各列 成员:"<<endl;  
	for(int i=0; i<row; ++i)  
	    for(int j=0; j<col; ++j)  
	    {  
	        //此处不可以写成:cin>>*p[i] [j]  
	        cin>>p[i][j];  
	        cout<<p[i][j];  
	    }  
	//时刻记住:有malloc就要有free   
	for(int i=0; i<row; ++i)  
	{  
	    free(*(p+i));  
	 }  
} 

“new-delete”

#include <iostream>
using namespace std;
 
int main()
{
	int row,col;
	cout<<"请输入开辟数组的行 & 列:"<<endl;
	cin>>row>>col; 
	//行的开辟 
	int **p = new int*[row];
	for(int i=0; i<row; ++i)
	{
		//列的开辟 
		p[i] = new int[col];
	}
	//数据输入 
	cout<<"请逐个输入 各行各列 数据:"<<endl;
	for(int i=0; i<row; ++i)
    	for(int j=0; j<col; ++j) 
		{
			cin>>p[i][j];
			cout<<p[i][j]<<"";
	 	} 
	//释放内存
	delete []p; 
 } 

memset

在这里插入图片描述

memset(a, 0, sizeof(a))就是将数组a的所有元素设置为0。

这个函数常用于对数组、结构体等数据结构进行初始化,或者清空缓存区。在实际使用中,可以根据需要将value设置为不同的值,如0、1、-1等等。

需要注意的是,memset函数只能设置某一个字节的值,不能进行更细粒度的设置。在对非字符类型的数组进行清空时,可能会出现错误的结果,因为memset是按字节进行操作的。

另外,在使用memset时,应该确保不会越界,否则会引发未定义行为。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1539273.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

力扣---全排列---回溯

思路&#xff1a; 递归做法&#xff0c;一般会有visit数组来判断第 i 位是否被考虑了。我们先考虑第0位&#xff0c;再考虑第1位&#xff0c;再考虑第2位...dfs函数中还是老套路&#xff0c;先判定特殊条件&#xff0c;再从当下的角度&#xff08;决定第 j 位是哪个元素&#x…

Docker 【通过Dockerfile构建镜像】【docker容器与镜像的关系】

文章目录 前言一、前期的准备工作二、上手构建一个简单的镜像三、DcokerFile1 指令总览2 指令详情 四、Dockerfile文件规范五、docker运行build时发生了什么?六、调试手段1. 修改镜像打包后&#xff0c;如何验证新内容已更新至镜像 七、Dockerfile优化方案 前言 docker构建镜…

优化选址问题 | 基于鹈鹕算法求解基站选址问题含Matlab源码

目录 问题代码问题 鹈鹕算法(Pelican Optimization Algorithm, POA)是一种相对较新的启发式优化算法,模拟了鹈鹕鸟觅食的行为。这种算法通常用于解决复杂的优化问题,如函数优化、路径规划、调度问题等。基站选址问题通常是一个复杂的优化问题,需要考虑覆盖范围、干扰、成…

AI修复老照片的一些参数设置

很久没更新CSDN文章了&#xff0c;这次给粉丝带来老照片修复流程 1>用ps修图 图章工具 笔刷 画笔修复 2>高清放大 3>lineattile 重绘 4>上色 具体可参考我的B站视频。 下面是一些笔记。 best quality,masterpiece,photorealistic,8k,ultra high res,solo,ext…

Fabric Measurement

Fabric Measurement 布料测量

通信网络设计[PTA]

文章目录 题目描述思路AC代码 题目描述 输入样例1 6 10 1 2 6 1 5 10 1 6 12 2 4 5 2 6 8 2 3 3 3 4 7 4 5 9 4 6 11 5 6 16 输出样例1 YES! Total cost:31输入样例2 5 4 1 2 3 1 3 11 2 3 8 4 5 9 输出样例2 NO! 1 part:1 2 3 2 part:4 5思路 最小生成树–kruskal算法 具体做法…

RbbitMQ使用教程

RabbitMQ 是一个可靠且成熟的消息传递和流代理&#xff0c;易于部署在云环境、本地和本地计算机上。它目前被全球数百万人使用。通过确认消息传递和跨集群复制消息的功能&#xff0c;您可以使用 RabbitMQ 确保您的消息是安全的。 RabbitMQ安装 推荐使用docker安装部署&#xf…

VMware Workstation Pro 17虚拟机超级详细搭建(含redis,nacos,docker)(一)

今天从零搭建一下虚拟机的环境&#xff0c;把nacos&#xff0c;redis等微服务组件还有数据库搭建到里面&#xff0c;首先看到的是我们最开始下载VMware Workstation Pro 17 之后的样子&#xff0c;总共一起应该有三部分因为篇幅太长了 下载地址 : VMware - Delivering a Digit…

pytest全局配置+前后只固件配置

pytest全局配置前后只固件配置 通过读取pytest.ini配置文件运行通过读取pytest.ini配置文件运行无条件跳过pytest.initest_mashang.pyrun.py 有条件跳过test_mashang.py pytest框架实现的一些前后置&#xff08;固件、夹具&#xff09;处理方法一&#xff08;封装&#xff09;方…

VUE3.0(一):vue3.0简介

Vue 3 入门指南 什么是vue Vue (发音为 /vjuː/&#xff0c;类似 view) 是一款用于构建用户界面的 JavaScript 框架。它基于标准 HTML、CSS 和JavaScript 构建&#xff0c;并提供了一套声明式的、组件化的编程模型&#xff0c;帮助你高效地开发用户界面。无论是简单还是复杂的界…

[ C++ ] STL---仿函数与priority_queue

目录 仿函数 示例一&#xff1a; 示例二 : 常见的仿函数 priority_queue简介 priority_queue的常用接口 priority_queue的模拟实现 基础接口 push() 堆的向上调整算法 堆的插入 pop() 堆的向下调整算法 堆的删除 priority_queue最终实现 仿函数 仿函数&#xff…

数据结构 - 二叉树非递归遍历

文章目录 前言一、前序二、中序三、后序 前言 本文实现二叉树的前中后的非递归遍历&#xff0c;使用栈来模拟递归。 文字有点简略&#xff0c;需要看图和代码理解 树节点&#xff1a; typedef char DATA; //树节点 typedef struct Node {DATA data; //数据struct Node* left…

MySQL进阶-----Linux系统安装MySQL

目录 前言 一、准备工作 1. 准备一台Linux服务器 2. 下载Linux版MySQL安装包 3. 上传MySQL安装包 二、安装操作指令 1. 创建目录,并解压 2.安装mysql的安装包 三、开启mysql与密码修改 1.启动MySQL服务 2. 查询自动生成的root用户密码 3.修改root用户密码 四、创…

【LeetCode】升级打怪之路 Day 26:回溯算法 — 集合划分问题

今日题目&#xff1a; 698. 划分为k个相等的子集 | LeetCode473. 火柴拼正方形 | LeetCode 参考文章&#xff1a; 经典回溯算法&#xff1a;集合划分问题 目录 LC 698. 划分为k个相等的子集 【classic&#xff0c;有难度】数据预处理&#xff1a;计算 target基本回溯优化 1&…

限时免费!Unity 资源商店威尔房间精品资源等你来领!

Unity 资源商店威尔房间精品资源分享 资源介绍资源特色免费领取 Unity 商店资源&#xff1a;Will’s Room Environment, Dormitory Room Environment 免费获取。 资源介绍 好消息来啦&#xff01;Unity 资源商店的威尔房间精品资源正在限时免费中&#xff01;这是一个非常受欢迎…

一维前缀和一维差分(下篇讲解二维前缀和二维差分)(超详细,python版,其他语言也很轻松能看懂)

本篇博客讲解一维前缀和&#xff0c;一维差分&#xff0c;还会给出一维差分的模板题&#xff0c;下篇博客讲解 二维前缀和&二维差分。 一维前缀和&#xff1a; 接触过算法的小伙伴应该都了解前缀和&#xff0c;前缀和在算法中应用很广&#xff0c;不了解也没有关系&#…

【算法】小强爱数学(迭代公式+数论取模)

文章目录 1. 问题2. 输入3. 输出4. 示例5. 分析6. 思路7. 数论&#xff0c;取模相关公式8. 数论&#xff0c;同余定理9. 代码 1. 问题 小强发现当已知 x y B xyB xyB以及 x y A xyA xyA时,能很轻易的算出 x n x_ {n} xn​ y n y_ {n} yn​ 的值.但小强想请你在已知A和B的…

【No.16】蓝桥杯动态规划下|线性DP装箱问题|计数DP0/1背包的方案数|过河卒|完全背包小明的背包2|最长公共子序列|蓝桥骑士|推荐练习题(C++)

线性DP&#xff0c;0/1背包简化版&#xff0c;装箱问题 【题目描述】有一个箱子容量为V(正整数&#xff0c; 0 ≤ V ≤ 20000 0 \le V \le 20000 0≤V≤20000)&#xff0c;同时有n个物品( 0 < n ≤ 30 0 < n \le 30 0<n≤30)&#xff0c;每个物品有一个体积(正整数)。…

ubuntu20.04安裝輸入法

文章目录 前言一、操作過程1、安装fcitx-googlepinyin2、配置language support 前言 參考文獻 一、操作過程 1、安装fcitx-googlepinyin sudo apt-get install fcitx-googlepinyin2、配置language support 第一次點擊進去&#xff0c;會讓你安裝 點擊ctrl和空格切換中英文…

Gin入门指南:从零开始快速掌握Go Web框架Gin

官网:https://gin-gonic.com/ GitHub:https://github.com/gin-gonic 了解 Gin Gin 是一个使用 Go 语言开发的 Web 框架,它非常轻量级且具有高性能。Gin 提供了快速构建 Web 应用程序所需的基本功能和丰富的中间件支持。 以下是 Gin 框架的一些特点和功能: 快速而高效:…