前言

博主在刷Leetcode的时候经常头疼的是数组初始化问题。尤其是最近,经常会遇到数组访问溢出的问题。

大意就是说访问数组下标越界了,简直头疼得不得了。
今天就结合例子来总结一下:

## 1374. 生成每种字符都是奇数个的字符串


假如我们这样的话:
(注意看malloc那一行代码)

char * generateTheString(int n){//if(n == 0) return ;//第一种初始化方法//char* res = malloc((n+1) * sizeof(char));//memset(res , 0 , (n+1) * sizeof(char));char*  res = malloc(n * sizeof(char));memset(res, 0, n * sizeof(char));//第二种初始化方法,会报错数组访问内存溢出//char *res = (char*)calloc(n+1, sizeof(char)); //char res[n];int i = 0;if(n%2 == 0){while(i<n-1){res[i++] = 'a';}res[n-1] = 'b';}else{while(i < n){res[i++] = 'a';}}return res;
}

使用这样初始化res数组:

    char*  res = malloc(n * sizeof(char));memset(res, 0, n * sizeof(char));

结果就是:一片红,系统提示数组访问溢出。



但是,如果改为这样的话:

    char* res = malloc((n+1) * sizeof(char));memset(res , 0 , (n+1) * sizeof(char));

也就是全部代码为:

char * generateTheString(int n){//if(n == 0) return ;//第一种初始化方法char* res = malloc((n+1) * sizeof(char));memset(res , 0 , (n+1) * sizeof(char));//char*  res = malloc(n * sizeof(char));//memset(res, 0, n * sizeof(char));//第二种初始化方法,会报错数组访问内存溢出//char *res = (char*)calloc(n+1, sizeof(char)); //char res[n];int i = 0;if(n%2 == 0){while(i<n-1){res[i++] = 'a';}res[n-1] = 'b';}else{while(i < n){res[i++] = 'a';}}return res;
}

结果就是:

真是百思不得其解!!!!

讲道理,是不需要为‘\0’预留空间的,但是为什么呢?

如果有知道的朋友欢迎指点!

C语言malloc初始化问题相关推荐

  1. C语言数组初始化及malloc初始化

    前言 做笔试题的时候老有些小错误,来总结一下. 数组赋值初始化的三个方式 1.{0} 初始化 例如: int nums[3] = {0}; 但是经常出现的是给定长度(变量)然后需要进行初始化,如果写成 ...

  2. C语言malloc,free的用法

    该博文为原创文章,未经博主同意不得转载,如同意转载请注明博文出处 本文章博客地址:https://cplusplus.blog.csdn.net/article/details/105163414 C ...

  3. c语言malloc作用,c语言中malloc是什么?怎么用?

    c语言中malloc是什么?怎么用? malloc() 函数用来动态地分配内存空间,其原型为:void* malloc (size_t size); 说明: [参数说明] size 为需要分配的内存空 ...

  4. 初始化全局变量实例说明C语言中初始化和未初始化的全局变量所在不同的段

    本文是一篇关于初始化全局变量的帖子 实例说明C语言中初始化和未初始化的全局变量地点不同的段 一个程序: Makefile: objs := bss.oall: bss bss: $(objs)gcc ...

  5. 使用malloc初始化一个类和new初始化一个类的区别

    new出来对象会调用对象的构造函数,但是malloc出来的对象是没有调用构造函数的,因此下面使用malloc初始化的对象私有变量是没有经过构造函数初始化的但是通过new出来的对象,对象已经经过构造函数 ...

  6. C语言变量初始化是必须的吗?不初始化会怎样?

    这个问题很重要!实际上前面讲那么多,其中有一个很重要的目的就是为了讲这个知识点.所谓初始化就是"第一次赋值"的意思.我们先来看一个程序: #include <stdio.h& ...

  7. C语言变量初始化作用,C语言变量初始化

    C语言变量初始化教程 如果是定义的 因此,在 C 语言中,一个很好的习惯就是在定义变量的同时,给变量初始化,也就是给变量一个默认值. C语言变量初始化详解 语法 type varname = valu ...

  8. C语言数组初始化及逆向输出

    C语言数组初始化及逆向输出 #include <stdio.h> int main() {int a[10];int i;for(i=0;i<10;i++){a[i] = i;}pu ...

  9. C语言允许初始化列表中末尾出现多余的逗号

    C语言允许初始化列表中出现多余的逗号,例如: int days[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31, }; 为什么这种特性是有用的 ...

最新文章

  1. 招募 | 《大数据实践课》企业合作项目,2020年夏季学期“清华大学大数据能力提升项目”...
  2. 应用MaxCompute实现变压器局部放电相位分析
  3. 【Flask】Jinja2模板之过滤器
  4. 核电集团数字化转型该怎么做?这篇案例分析帮你节省90%时间
  5. Java异常处理——try-with-resource 语法糖
  6. java的mvc实训报告_javaweb实验报告——MVC.docx
  7. 动态内存分配及变量存储类别(第二部分)
  8. redis源码剖析(十一)—— Redis字符串相关函数实现
  9. html表格添加选项代码,使用实例演示 表单 中的选项卡功能 在里面添加table id=bootstrap-table/table后不显示表格...
  10. 【AI面试题】GBDT原理、如何用于分类、常用损失函数
  11. 对于over-posting的防御
  12. Fedora17下Firefox安装flashplayer
  13. Linux批量清空当前目录中的日志文件
  14. Ubuntu16.04安装ROS Kinetic详细过程
  15. 计算机创新设计2大赛获奖作品3Done,走向3D创意世界——3Done创客设计比赛
  16. matlab教程 for循环,Matlab简单教程:循环
  17. 下软件,就靠这几个网站
  18. 13.6.1 PDF 偏执狂
  19. 满分室间质评之GATK Somatic SNV+Indel+CNV+SV(下)性能优化
  20. 个人完成案例之乐学成语(显示所有动物类成语的列表和每条成语的详细信息)

热门文章

  1. 速读《构建之法 现代软件工程》的五个问题
  2. 麻省理工大学公开课 离散数学
  3. Sketchup插件Vray制作室内高质量渲染学习教程
  4. 杭州网络实名制遇冷:真实身份无规可查
  5. c语言和plc编程,PLC编程-C语言PPT学习课件
  6. 小型便携式计算机怎么拆卸,和手掌一样迷你的电脑!神舟mini PC真机拆解
  7. html div图片垂直居中,css如何让img垂直居中
  8. 【车牌识别和动态称重系统】(二)基于树莓派+HyperLPR的中文车牌识别
  9. wince 访问共享文件_WINCE 访问PC共享文件夹
  10. 【软路由】J4125安装PVE7.3+iKuai+OpenWrt+NAS+Win10+Debian+CentOS