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

在这里插入图片描述

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时,应该确保不会越界,否则会引发未定义行为。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值