消除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语言中如何将二维数组作为函数的参数传递
今天写程序的时候要用到二维数组作参数传给一个函数,我发现将二维数组作参数进行传递还不是想象得那么简单里,但是最后我也解决了遇到的问题,所以这篇文章主要介绍如何处理二维数组当作参数传递的情况,希望大家不 ...
随机推荐
- windows设置多个JDK环境
1.查看jdk版本 java -version 2.查看JAVA_HOME和PATH的变量值 echo %JAVA_HOME% set path 3.临时修改环境变量JAVA_HOME和PATH的变量 ...
- Python从零开始——运算符
- elasticsearch 索引和mapping导入导出命令
导mapping:elasticdump \ --input=http://192.168.102.13:9200/search_v1 \ --output=http://192.168.102.69 ...
- seq2seq模型详解及对比(CNN,RNN,Transformer)
一,概述 在自然语言生成的任务中,大部分是基于seq2seq模型实现的(除此之外,还有语言模型,GAN等也能做文本生成),例如生成式对话,机器翻译,文本摘要等等,seq2seq模型是由encoder, ...
- linux虚拟机获取不到ip的解决方法 --
问题描述: 在win10操作系统上,安装了centos7 虚拟机,安装后,用wifi网络可以获取ip,但是切换到手机热点或有线网络就获取不到ip 解决办法: 按照一般的修改ONBOOT =yes, 然 ...
- SDN Reading Notes
网络操作编程语言:Frenetic QoS策略实施框架:PolicyCop
- 网络协议 5 - ICMP 与 Ping
日常开发中,我们经常会碰到查询网络是否畅通以及域名对应 IP 地址等小需求,这时候用的最多的应该就是 ping 命令了. 那你知道 ping 命令是怎么工作的吗?今天,我们就来一起认识下 ping 命 ...
- 第02组 团队Git现场编程实战
目录 1. 组员职责分工(2分) 2. github 的提交日志截图(1分) 3. 程序运行截图(3分) 4. 程序运行环境(1分) 5. GUI界面(5分) 6. 基础功能实现(10分) 7. 鼓励 ...
- 第08组 Beta冲刺(4/5)
队名:955 组长博客:点这里! 作业博客:点这里! 组员情况 组员1(组长):庄锡荣 过去两天完成了哪些任务 文字/口头描述 ? 测试新功能中 展示GitHub当日代码/文档签入记录 接下来的计划 ...
- 识别led灯和驱动器的关联关系
精准答案: https://wenku.baidu.com/view/db1f7361ac02de80d4d8d15abe23482fb4da02d6.html?qq-pf-to=pcqq.group ...