首页 > 系统相关 >C++大内存分配错误

C++大内存分配错误

时间:2023-12-25 23:24:12浏览次数:43  
标签:错误 int C++ char 内存 类型 影像 size

C++无法分配大内存

当影像较大时,m和n是int类型时,char *a=new char[m*n]可能出现无法分配内存的错误
原因分析:
由于早期数据处理需求对内存需要较小,例如早期影像较小,影像长宽的积较小,char *a=new char[m*n]不会出错。时代变化,影像体积变大,老代码仍旧使用int类型申请内存,将会出错。
m和n代表影像的长宽,m和n都是int类型,当m和n比较大时,例如m=50000,n=50000时,
此时m和n相乘结果为25亿,超出了32位int类型的最大值(约21亿),m*n被整体转换成类一个负数值(绝对值较小),new[size]当中的size默认是size_t类型的无符号整型,前面绝对值较小的负数被转换成了一个非常大的无符号正数,这个正数的大小远远超出了系统内存大小,因此无法分配成功;
以前影像的长宽没有这么大,像素不会超过21亿,所以这个问题不明显。
解决办法:

  1. 完美解决办法
    将m和n定义为size_t类型。
  2. 一般解决办法
    将m和n定义为int64类型。足够作为像素数量使用。

标签:错误,int,C++,char,内存,类型,影像,size
From: https://www.cnblogs.com/hdming/p/17927164.html

相关文章

  • 【选择排序】之C++实现
    描述选择排序(SelectionSort)是一种简单直观的排序算法。它的基本思想是:每一轮从待排序的数据中选择最小(或最大)的一个元素,然后与待排序数据的第一个元素交换位置。对剩余未排序的数据重复这个过程,直到所有数据排序完成。实现思路遍历数组,找到最小元素的下标。将最小元素与当前......
  • C++ Qt开发:Charts绘制各类图表详解
    Qt是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍TreeWidget与QCharts的常用方法及灵活运用。在之前的文章中笔者介绍了如何使用QCharts模块来绘制......
  • Gitlab 登录报422错误,账号密码是正确的
    登录页报错误:thechangeyourequestedwasrejected[root@ebs-139266~]#dateTueDec1901:05:32CST2023登录服务器发现服务器时间不正确使用命令同步时间[root@ebs-139266~]#ntpdatentp.aliyun.com19Dec10:48:12ntpdate[24954]:steptimeserver203.107.6.88offs......
  • C++ filesystem 库使用
    一、filesystem介绍filesystem源自boost.filesystem库,在C++17合并进C++标准库中,filesystem中的所有操作是线程不安全的。二、路径相关操作在filesystem库中提供path类来对路径进行操作,后续的相关操作,如打开文件、遍历目录、判断文件类型等,都是需要用path作为参数来指定操作具......
  • Day38 三种数组初始化及内存分析
    三种数组初始化及内存分析Java内存分析Java内存:1.堆存放new的对象和数组​可以被所有的线程共享,不会存放别的对象引用2.栈存放基本变量类型(会包含这个基本类型的具体数值)​引用对象的变量(会存放这个引用在堆里面的具体地址)3.方法区可以被......
  • 无涯教程-PostgreSQL - 连接C/C++
    本教程将使用libpqxx库,该库是PostgreSQL的官方C++客户端API。libpqxx的源代码在BSD许可下可用,因此您可以免费下载,将其传递给他人,进行更改,出售,将其包含在自己的代码中,并与选择的任何人共享您的更改。安装Libpqxx可以从以下链接下载最新版本的libpqxx:下载Libpqxx。因此,下载......
  • 国产的固态内存已经全面占领市场,那么使用国产的内存颗粒的内存条呢
    随着国产固态硬盘的技术突破把整个市场的固态硬盘价格拉低到一半,现在买固态就像当年买机械那种感觉,是十分的舒畅,五六百就可以买个2T的固态,1200左右就可以买一个4T的固态,简直是大快人心,但是在国产固态硬盘全面占领市场的同时我们的国产内存(使用国内内存颗粒的)呢?与国产固态硬盘相......
  • Windows环境 CMake 配置C++调用Python
    #CMakeLists.txtadd_library(python3STATICIMPORTED)#这里是使用python的安装路径set_target_properties(python3PROPERTIESIMPORTED_LOCATION"D:/python/libs/python39.lib")#使用python的静态库target_link_libraries(TestDemo......
  • CLR/C++回调函数callback和C# delegate的互相转换
    在进行CLR/C++进行开发的时候会经常遇到C++回调函数和C#的delegate之间的相互转换,例如在C++非托管类型的代码中的回调函数需要使用C#类的函数,或者是在C#代码中需要使用非托管C++的函数,这时候就需要在回调函数和delegate代理之间进行转换。C++:回调函数:typedefvoid(*pfunc)(in......
  • c++实现mp3
    c++实现http_mp4......