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

C++大内存分配错误

时间:2024-12-28 10:02:21浏览次数:7  
标签:错误 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://blog.csdn.net/booming2/article/details/144757909

相关文章

  • JVM 主要组成部分与内存区域
    一、JVM主要组成部分:JVM的主要包含两个组件和两个子系统,分别为:(1)本地库接口(NativeInterface):与nativelib(本地方法库)交互,融合其他编程语言为Java所用,是与其它编程语言交互的接口(2)运行时数据区(Runtimedataarea():即常说的JVM内存(3)类加载子系统(Classloader):根据全限......
  • [VUE]CALL_AND_RETRY_LAST分配失败-JavaScript堆内存不足 errno134
    使用vscode开发项目,由于项目较大,在运行npmrundev命令后,在一定的时间范围内,对vscode中的代码进行保存后,会自动编译运行,保存几次后就报错,需要重新运行npmrundev,很耗费时间)后报错报错:CALL_AND_RETRY_LASTAllocationfailed-JavaScriptheapoutofmemory(CALL_AND_RETRY_LAS......
  • c++入门
    ⦁C++基础1.数据类型主要有五类数据类型:布尔类型,字符型,整型,浮点型和无类型。部分数据类型及所占位数:数据类型C++语言表示所占位数范围字符型char8b(1字节)-128~127或0~255无符号字符型unsignedchar8b(1字节)0~255整型int......
  • 只谈C++11新特性 - 删除函数
    删除函数背景在C++11之前,C++的类默认会生成拷贝构造函数和赋值运算符。这在某些情况下会引发问题,尤其是在我们希望明确禁止某些操作时。假设我们有一个类,它不希望被拷贝,但未明确声明拷贝构造函数和赋值运算符,这时编译器会自动生成默认实现,导致程序员可能无意间拷贝了该......
  • [蓝桥杯 2013 省 AB] 错误票据
    蓝桥杯,都知道吧 [蓝桥杯2013省AB]错误票据(抱歉是图片形式)Python解决程序n=int(input())ids=[]foriinrange(n):line=list(map(int,input().split()))ids.extend(line)ids.sort()missing=0duplicate=0forjinrange(len(ids)-1):......
  • 期末复习c++时 发现以前没注意的点
    期末复习因为没有往年卷做现在闲得无聊导致的......
  • 13C++循环结构-for循环(3)
    一、回文数问题:“地满红花红满地,天连碧水碧连天”是一副回文联,用回文形式写成的对联,既可以顺读,也可以倒读,意思不变。在数学中也存在这样特征的一类数,称为回文数。设n是一任意自然数,将n各个数位上的数字反向排列所得自然数m,若m等于n,则n为回文数。例如,1234321是回文数,1234567不是......
  • C#使用Tesseract C++ API过程记录
    TesseractTesseract是一个开源的光学字符识别(OCR)引擎,最初由Hewlett-Packard(惠普)实验室开发,后来由Google收购并继续维护和开源贡献。Tesseract可以识别多种语言的文字,广泛应用于将图片或扫描文档中的文本内容转换成可编辑的文本格式。随着深度学习技术的发展,Tesseract......
  • C#使用Tesseract C++ API过程记录
    TesseractTesseract是一个开源的光学字符识别(OCR)引擎,最初由Hewlett-Packard(惠普)实验室开发,后来由Google收购并继续维护和开源贡献。Tesseract可以识别多种语言的文字,广泛应用于将图片或扫描文档中的文本内容转换成可编辑的文本格式。随着深度学习技术的发展,Tesseract也整合......
  • C#调用C++代码,以OpenCV为例
    前言使用C#调用C++代码是一个很常见的需求,因此本文以知名的C++机器视觉库OpenCV为例,说明在C#中如何通过使用P/Invoke(平台调用)来调用C++代码。只是以OpenCV为例,实际上在C#中使用OpenCV可以使用OpenCVSharp这个项目,这是一个很优秀的项目,GitHub地址:https://github.com/shimat/opencv......