消除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语言中如何将二维数组作为函数的参数传递
今天写程序的时候要用到二维数组作参数传给一个函数,我发现将二维数组作参数进行传递还不是想象得那么简单里,但是最后我也解决了遇到的问题,所以这篇文章主要介绍如何处理二维数组当作参数传递的情况,希望大家不 ...
随机推荐
- Fortify漏洞之Portability Flaw: File Separator 和 Poor Error Handling: Return Inside Finally
继续对Fortify的漏洞进行总结,本篇主要针对 Portability Flaw: File Separator 和 Poor Error Handling: Return Inside Fina ...
- 【转载】Gradle学习 第八章:依赖管理基础
转载地址:http://ask.android-studio.org/?/article/10 This chapter introduces some of the basics of depend ...
- SPring boot jpa 封装查询条件
最近使用spring data jpa做了两个项目,对于动态查询的不友好做了个类似hibernate的封装,记录也分享下 首先定义一个所有条件的容器,继承Specification /** * 定义一 ...
- php dirname 的简单使用
dirname dirname-返回路径中的目录部分 说明 dirname(string$path) :string 给出一个包含有指向一个文件的全路径的字符串,本函数返回去掉文件名后的目录名. 参数 ...
- 阿里云Mysql导入大数据文件
1.查询数据保存为CSV文件 select * from account into outfile '/root/account.csv' fields terminated by ',' enclo ...
- Django学习之十四:Django ORM继承关系
目录 Django ORM继承关系 1. SINGLE_TABLE(django好像不支持) 2. TABLE_PER_CLASS 3. JOINED 4. 代理继承 Django ORM继承关系 参 ...
- 交叉编译tmux
作者:彭东林 邮箱:pengdonglin137@163.com 参考 https://gist.github.com/tessus/5e118d44261a6ab2f198 环境 Qemu-4.1 ...
- 异步HttpClient大量请求
由于项目中有用到HttpClient异步发送大量http请求,所以做已记录 思路:使用HttpClient连接池,多线程 public class HttpAsyncClient { private ...
- GIL全局解释器锁及协程
GIL全局解释器锁 1.什么是GIL全局解释器锁 GIL本质是一把互斥锁,相当于执行权限,每个进程内都会存在一把GIL同一进程内的多线程,必须抢到GIL之后才能使用Cpython解释器来执行自己的代码 ...
- Nacos
欢迎来到 Nacos 的世界! Nacos 致力于帮助您发现.配置和管理微服务.Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现.服务配置.服务元数据及流量管理. Nacos 帮助您 ...