动态申请二维数组,无非就是通过指针来实现。@wowpH

过程分三步:1、申请内存,2、使用数组,3、释放内存。

代码如下:

/********************************************************************
description: 动态申请二维数组
author: wowpH
csdnid: pfdvnah
date : 2019-11-9 15:38:25
from : https://blog.csdn.net/pfdvnah/article/details/102987174
********************************************************************/
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int row, col;
printf("输入行数和列数:");
scanf_s("%d %d", &row, &col); int** matrix = NULL;// 初始化为NULL // 动态申请内存
matrix = (int**)malloc(row * sizeof(int*));
for (int i = 0; i < row; ++i) {
matrix[i] = (int*)malloc(col * sizeof(int));
} // 给二维数组赋值
for (int i = 0; i < row; ++i) {
for (int j = 0; j < col; ++j) {
matrix[i][j] = i * col + j;
}
} // 输出二维数组
for (int i = 0; i < row; ++i) {
for (int j = 0; j < col; ++j) {
printf("%2d", matrix[i][j]);
putchar((j < col - 1) ? ' ' : '\n');
}
} // 释放内存
for (int i = 0; i < row; ++i) {
free(matrix[i]);
}
free(matrix);
return 0;
}

这是最中规中矩的VS代码了。但是这段代码会出现 5 个警告(分 3 类):

严重性	代码	说明																					行
警告 C6011 取消对 NULL 指针“matrix[i]”的引用。 16
警告 C6386 写入到“matrix”时缓冲区溢出: 可写大小为“row*sizeof(int *)”个字节,但可能写入了“8”个字节。 11
警告 C6386 写入到“matrix[i]”时缓冲区溢出: 可写大小为“col*sizeof(int)”个字节,但可能写入了“8”个字节。 16
警告 C6385 从“matrix[i]”中读取的数据无效: 可读大小为“col*sizeof(int)”个字节,但可能读取了“8”个字节。 22
警告 C6385 从“matrix”中读取的数据无效: 可读大小为“row*sizeof(int *)”个字节,但可能读取了“8”个字节。 28

如何去掉这些警告呢?

安全的写法如下所示:

/********************************************************************
description: 动态申请二维数组
author: wowpH
csdnid: pfdvnah
date : 2019-11-9 15:38:25
from : https://blog.csdn.net/pfdvnah/article/details/102987174
********************************************************************/
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int row, col;
printf("输入行数和列数:");
scanf_s("%d %d", &row, &col); int** matrix = NULL;// 初始化为NULL // 消除C6085和C6086警告
if (row <= 0 || col <= 0) {
printf("行数或列数不合法!\n");
exit(-1);
} // 动态申请内存
matrix = (int**)malloc(row * sizeof(int*)); // 消除C6011警告
if (NULL == matrix) {
printf("无法动态申请内存!\n");
exit(-1);
} for (int i = 0; i < row; ++i) {
matrix[i] = (int*)malloc(col * sizeof(int)); // 消除C6011警告
if (NULL == matrix[i]) {
printf("无法动态申请内存!\n");
exit(-1);
}
} // 给二维数组赋值
for (int i = 0; i < row; ++i) {
for (int j = 0; j < col; ++j) {
matrix[i][j] = i * col + j;
}
} // 输出二维数组
for (int i = 0; i < row; ++i) {
for (int j = 0; j < col; ++j) {
printf("%2d", matrix[i][j]);
putchar((j < col - 1) ? ' ' : '\n');
}
} // 释放内存
for (int i = 0; i < row; ++i) {
free(matrix[i]);
}
free(matrix);
return 0;
}

原文链接https://blog.csdn.net/pfdvnah/article/details/102987174


- End - wowpH - pfdvnah -

消除VS中动态申请二维数组C6011,C6385,C6386的警告的更多相关文章

  1. C++中动态申请二维数组并释放方法

    C/C++中动态开辟一维.二维数组是非常常用的,以前没记住,做题时怎么也想不起来,现在好好整理一下. C++中有三种方法来动态申请多维数组 (1)C中的malloc/free (2)C++中的new/ ...

  2. c中使用malloc动态申请二维数组

    前言 今天写代码的时候,想要动态的申请一个二维数组空间,思索了一段时间才写出来,这里记录一下吧,以后就不至于再浪费时间了.下面以申请int型数组作为例子: 申请一维数组 一维数组的数组名可以看成数组起 ...

  3. 如何在C++中动态建立二维数组(转)

    http://blog.sina.com.cn/s/blog_7c073a8d0100qp1w.html http://blog.163.com/wujiaxing009@126/blog/stati ...

  4. c++和c动态申请二维数组

    这是我面试中遇到的一道题,用c和c++分别申请一个二维数组,int **res,要求申请后的可以使用res[3][4]这一类防存方式. 这个是没有错误检查的版本. 答案: c++语言的版本 int * ...

  5. 转:用STL中的vector动态开辟二维数组

    用STL中的vector动态开辟二维数组 源代码:#include <iostream>#include <vector>using namespace std;int mai ...

  6. C语言动态生成二维数组

    # 动态创建二维数组示例 #include "stdlib.h" #include "stdio.h" #include <malloc.h> in ...

  7. C语言 动态创建二维数组

    /*C语言 如何动态创建二维数组 转化为一维数组申请数组,创建和释放都比较简单 */ #include <stdlib.h> #include <stdio.h> #inclu ...

  8. OpenCV中Mat与二维数组之间的转换

    ---恢复内容开始--- 在OpenCV中将Mat(二维)与二维数组相对应,即将Mat中的每个像素值赋给一个二维数组. 全部代码如下: #include <iostream> #inclu ...

  9. C语言中如何将二维数组作为函数的参数传递

    今天写程序的时候要用到二维数组作参数传给一个函数,我发现将二维数组作参数进行传递还不是想象得那么简单里,但是最后我也解决了遇到的问题,所以这篇文章主要介绍如何处理二维数组当作参数传递的情况,希望大家不 ...

随机推荐

  1. C# DataTable 转实体对象

    DataTable 转实体对象 /// <summary> /// DataTable通过反射获取单个对象 /// </summary> public static T ToS ...

  2. QT在Mac OS上编译运行初体验

    QT是一个跨平台的框架,支持PC端(Windows.Linux和Mac OS)以及移动端(Android和IOS),之前的开发大都在Windows或者Ubuntu上,考虑到项目多平台支持性,本文对Ma ...

  3. Guava工具类学习

    目录 一.介绍 二.Optional类 1.定义 2.java8自带Optional 3.使用 三.Preconditions类 1.定义 2.使用 四.Ordering类 1.定义 2.使用 五.R ...

  4. idea 忽略提交文件

    https://blog.csdn.net/wangjun5159/article/details/74932433 https://blog.csdn.net/m0_38001814/article ...

  5. docker上启动mysql镜像,mysq中记录乱码解决方法

    在docker上启动一个mysql, 1. docker pull mysql 2. docker run --name mysql_dev -p 3306:3306 -e MYSQL_ROOT_PA ...

  6. 将qemu使用的设备树dump出来

    像下面的qemu启动命令: sudo qemu-system-aarch64 \ -M virt \ -cpu cortex-a53 \ -smp \ -m 4096M \ -kernel ./lin ...

  7. LCD编程_简单测试

    首先,需要编写一个led_test.c的文件,依据代码框架,在led_test.c中我们能够看到的只是led.c.我们是看不到led_controller.c的.比如说,在led_test.c中,需要 ...

  8. 201871010101-陈来弟《面向对象程序设计(java)》第二周学习总结

    201871010101-陈来弟<面向对象程序设计(java)>第二周学习总结 项目 内容 这个作业属于哪个课程 <任课教师博客主页链接>https://www.cnblogs ...

  9. shell脚本启动所有集群节点

    #profile变量追加到.bashrc中 cat /etc/profile >> ~/.bashrc #start-all-cluster.sh  启动脚本 #!/bin/bash ec ...

  10. phpcms添加https后台分页错误的解决方法

    今天修改一位客户的phpcms网站,他要求添加https,这对ytkah来说是轻车熟路了,但是后台稍微有点问题,点击分页出现错误,将鼠标移到下一页显示的链接是https://www.abc.com/w ...