消除VS中动态申请二维数组C6011,C6385,C6386的警告
动态申请二维数组,无非就是通过指针来实现。@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的警告的更多相关文章
- C++中动态申请二维数组并释放方法
C/C++中动态开辟一维.二维数组是非常常用的,以前没记住,做题时怎么也想不起来,现在好好整理一下. C++中有三种方法来动态申请多维数组 (1)C中的malloc/free (2)C++中的new/ ...
- c中使用malloc动态申请二维数组
前言 今天写代码的时候,想要动态的申请一个二维数组空间,思索了一段时间才写出来,这里记录一下吧,以后就不至于再浪费时间了.下面以申请int型数组作为例子: 申请一维数组 一维数组的数组名可以看成数组起 ...
- 如何在C++中动态建立二维数组(转)
http://blog.sina.com.cn/s/blog_7c073a8d0100qp1w.html http://blog.163.com/wujiaxing009@126/blog/stati ...
- c++和c动态申请二维数组
这是我面试中遇到的一道题,用c和c++分别申请一个二维数组,int **res,要求申请后的可以使用res[3][4]这一类防存方式. 这个是没有错误检查的版本. 答案: c++语言的版本 int * ...
- 转:用STL中的vector动态开辟二维数组
用STL中的vector动态开辟二维数组 源代码:#include <iostream>#include <vector>using namespace std;int mai ...
- C语言动态生成二维数组
# 动态创建二维数组示例 #include "stdlib.h" #include "stdio.h" #include <malloc.h> in ...
- C语言 动态创建二维数组
/*C语言 如何动态创建二维数组 转化为一维数组申请数组,创建和释放都比较简单 */ #include <stdlib.h> #include <stdio.h> #inclu ...
- OpenCV中Mat与二维数组之间的转换
---恢复内容开始--- 在OpenCV中将Mat(二维)与二维数组相对应,即将Mat中的每个像素值赋给一个二维数组. 全部代码如下: #include <iostream> #inclu ...
- C语言中如何将二维数组作为函数的参数传递
今天写程序的时候要用到二维数组作参数传给一个函数,我发现将二维数组作参数进行传递还不是想象得那么简单里,但是最后我也解决了遇到的问题,所以这篇文章主要介绍如何处理二维数组当作参数传递的情况,希望大家不 ...
随机推荐
- Kubernetes概念之mater、node
很久没写博客了,终于把重心找回来了,不过没有以前有斗志.有理想.有目标了.慢慢来.你若问我我最近几年的规划是什么,还真不知道.突然发现摧毁一个人真的很简单.k8s也是一遍一遍的从入门到放弃,还是要好好 ...
- html5表单上传控件Files筛选指定格式的文件:accept属性过滤excel文件
摘自:http://blog.csdn.net/jyy_12/article/details/9851349 (IE9及以下不支持下面这些功能,其它浏览器最新版本均已支持.) 1.允许上传文件数量 允 ...
- 机器学习——k-均值算法(聚类)
文章目录 k-均值(k-means)聚类 1.k-均值算法 2.k-均值算法的代价函数 3.k-均值算法步骤 4.初始化聚类中心点和聚类个数 5.sklearn实现k-means算法 k-均值(k-m ...
- scikit-learn 中的 KMeans
语法 sklearn.cluster.KMeans(n_clusters=8, # 簇的个数, 默认为 8 init='k-means++', # 初始簇中心的获取方法 n_init=10, # 初始 ...
- matplot 绘制定制饼图
1.普通风格 代码 import matplotlib.pyplot as plt plt.rcParams['font.sans-serif'] = 'SimHei' # 使图形中的中文正常编码显示 ...
- 【视频技术】FFMPEG应用(转)
https://blog.csdn.net/kaikai136412162/article/details/80746961 https://blog.csdn.net/weixin_37897683 ...
- webpack 的安装与使用
这里使用webpack4.41.2 为例 一.安装webpack 1.本地安装,安装最新版本或特定版本 npm install --save-dev webpack npm install --sav ...
- SpringBoot如何切换Redis默认库
一些闲扯的话 我们清楚,Redis 尽管提供了 16 个索引库,但是每个数据库之间是隔离互不共享的,客户端默认连接使用的是 0 号数据库 . 注意:上方情况是基于单机 Redis 的,在集群模式下是没 ...
- restql 学习二 几种查询模式
restql 提供了比较强大的查询处理. 支持的几种查询模式 基本查询,主要是单一映射资源的查询,(from,with,only,header,cache...) 并行查询,多个资源的同时查询,(对于 ...
- Vue实践TS中的一些常见错误解决方案
mixin报错 import { Component, Prop, Vue ,Mixins} from 'vue-property-decorator' import httpminix from ' ...