在C语言中想要创建数组只能自己malloc或者calloc,数组复制则是memcpy。

这样创建出来的数组在调用时是不会检测数组边界的,即你声明了一个长度为5的数组,却可以访问第6个位置……也可以给第7个位置赋值……
不知道这算不算内存泄露,可否通过这种方法偷取内存中的情报呢?

例:

int main(){int *list=(int*)malloc(5*sizeof(int));for(int i=0;i<5;++i){list[i]=i;}for(int i=0;i<15;++i){cout<<list[i]<<endl;}free(list);
}

我给list分配了5个位置并赋值,但是调用时完全可以无视数组长度限制查看第6个位置甚至第n个位置。

在赋值时如果使用malloc,不删除原内存数据的话,则会输出某些“随机数”,是不是原内存中的数据呢?

memcpy同样不考虑边界,我可以把一个长度为20的数组复制给一个长度为5的数组,然后长度为5的数组长度就变成了20了……

例:

int main(){int* list=(int*)malloc(10*sizeof(int));int * list2=(int*)malloc(5*sizeof(int));for(int i=0;i<20;i++){list[i]=i;}memcpy(list2,list,20*sizeof(int));for(int i=0;i<20;++i){cout<<i<<" "<<list2[i]<<endl;}free(list);free(list2);
}

注意这里list只声明了长度了为10的内存,但是却赋了20个值。

list2声明长度为5,但是同样复制进了20个值,都没有报错可以正常运行。

这样……声明内存还有何意义……完全没有长度的限制啊!那会不会覆盖掉其它的内存数据?

感觉好混乱啊~

转载于:https://www.cnblogs.com/plwang1990/p/4274096.html

C语言中的数组的使用——混乱的内存管理相关推荐

  1. c语言中字符串数组的地址存放以及%s输出单个字符导致程序崩溃的问题

    代码 总结下c语言中字符串数组的地址存放问题 #include <iostream> using namespace std; #include<bits/stdc++.h>i ...

  2. C语言中动态数组的作用,C语言实现动态数组

    前言 在纯C语言编程中,数组的创建必须是固定的大小,因为C语言本身没有提供动态数组这种数据结构,这是一个让习惯了使用高级语言编程的人转做C开发面临的一个很头疼的问题,本篇文章就将介绍如何使用纯C语言编 ...

  3. 【示例】C语言中利用数组存放函数指针

    C语言中利用数组存放函数指针,增加函数使用的灵活性.使用时只需提供数组索引,即可调用不同函数. 预备知识: 1.指向函数的指针 一个函数在编译时被分配一个入口地址,这个地址就被称为函数的指针. 例如: ...

  4. C++与C语言中有关数组中元素排序

    C++与C语言中有关数组中元素排序 C语言中 ​ #include<stdio.h> #define n 4 int main(){ int a[n]; int i,j,temp; for ...

  5. 在c语言中引用数组元素时,其数组下标的数据类型允许是什么

    在c语言中引用数组元素时,其数组下标的数据类型允许是:整型常量或整型表达式.C语言规定只能逐个引用数组元素而不能一次引用整个数组,数据元素的表示形式为"数组名[下标]",下标可以是 ...

  6. C语言中字符数组的初始化与注意事项

    在C语言中字符数组的初始化有三种常见的方法: char a[5] = {'a','b','c','d','e'};char c[] = {'a','b','c','d','e'};char b[] = ...

  7. Java语言中的----数组

    day07  Java语言中的--数组 一.数组的概述: 什么是数组?数组是干什么用的?为啥要学数组?这些都是疑问.再你学完数组以后就知道了,数组是存储在相邻内存位置的单一数据类型的元素集合.什么是单 ...

  8. Java快速入门学习笔记8 | Java语言中的数组

    有人相爱,有人夜里开车看海,有人却连LeetCode第一题都解不出来!虽然之前系统地学习过java课程,但是到现在一年多没有碰过Java的代码,遇到LeetCode不知是喜是悲,思来想去,然后清空自己 ...

  9. C语言中字符数组的初始化与赋值,字符串相关函数

    C语言中字符数组的初始化与赋值,字符串相关函数! 1.字符数组初始化 在C语言中,字符串是当做字符数组来处理的:所以字符串有两种声明方式,一种是字符数组,一种是字符指针. (1)直接逐个初始化字符数组 ...

最新文章

  1. samtools merge_【生信工具】Samtools 安装与使用 | “十年以后,工具难免沦为朋友”...
  2. Java算法--串的简单处理
  3. 如何独立实现一个基于知识图谱的问答系统
  4. Git初学札记(九)————EGit检出远程分支
  5. vba判断文件是否存在的两种方法
  6. centos修改磁盘uuid_如何修改linux磁盘的uuid
  7. python拆分合并文件_python实现文件的分割与合并
  8. Numpy,Pandas,Matplotlib
  9. POJ1214 UVA127 Accordian Patience【vector】
  10. note同步不及时 one_续航800仅卖23万,比亚迪唐DM为啥却卖不过理想ONE?
  11. 当迷茫在大学里泛滥成灾——李开复
  12. 在OpenCV中使用YOLO v3进行物体检测
  13. php写幻灯片,JavaScript原生代码实现幻灯片
  14. 水经注地图发布服务中间件的适用范围
  15. 科技文献检索与计算机应用试卷,科技文献检索试卷
  16. 中兴e9000服务器,ZXCTN 9000-E设备系列_ZXCTN 9000-E系列中兴传输设备_中兴设备 - 诺深达华为光端机...
  17. 大数据毕设/课设 - 基于大数据的全国疫情实时监控大屏系统设计与实现
  18. k8s中对pod设置限制只设置了limits
  19. 代码维护服务器,维护服务器的利器-pubwin 2009程序代码
  20. 使用纸壳CMS创建多语言网站

热门文章

  1. java 全排列 非递归_全排列(递归与非递归实现) | 学步园
  2. Qt笔记-解决QObject::startTimer: Timers cannot be started from another thread
  3. C++笔记-基于邻接矩阵的BFS(宽度优先遍历)
  4. Java工作笔记-WebService使用JDK搭建WebService及调用
  5. Python笔记-使用代理切换ip爬取数据
  6. C++ opengl 纹理生成
  7. php登录注册脚本,PHP - 登录脚本
  8. gan怎么输入一维数据_时空序列预测模型GAN+LSTM
  9. @configuration注解_超级全面的 SpringBoot 注解介绍,每一个用途都应该清晰
  10. C语言实现tolower