首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >即使我在主内存中还有很多空间,realloc也会失败

即使我在主内存中还有很多空间,realloc也会失败
EN

Stack Overflow用户
提问于 2015-06-07 21:07:26
回答 1查看 40关注 0票数 1
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include<iostream>
#include<algorithm>
#include<malloc.h>
#include<stdlib.h>
using namespace std;

typedef struct _intExpandArray{
    int size;
    int max;
    int *base;
} intExpandArray;

void addExpandArrayElement(intExpandArray *arr, int element){
    int *p;
    if(arr->base == NULL){
        arr->base = (int* )malloc(2*sizeof(int));
        arr->size = 0;
        arr->max = 2;
        cout<<"base = " << arr->base <<endl;
    }else if(arr->size >= arr->max){
        p = (int *)realloc(arr->base, arr->max*2*sizeof(int));
        if(p != NULL){
            cout<<"reallocate successful base = " << arr->base << endl;
            arr->max *= 2;  
        }else{
            cout<<"reallocate failed base = "<< arr->base <<endl;
        }
    }
    *(arr->base + arr->size) = element;
    arr->size++;
}

/* display array */
void dispIntExpandArray(intExpandArray arr){
    int i;
    int n = arr.size;
    int *p = arr.base;
    cout<< "size = " << n << " max size = " << arr.max << endl;
    for(i = 0; i < n; i++){
        cout<<p[i]<<" ";
    }
    cout<<endl;
}

int main(){
    intExpandArray arr;
    arr.base = NULL;
    int i = 0;
    for(i = 0; i < 10; i++){
        addExpandArrayElement(&arr, i);
        //dispIntExpandArray(arr);
    }
    return 0;
}

为什么我不能重新分配内存?(我的window操作系统上还有很多内存)当我运行这段代码时,malloc函数工作得很好,但realloc函数只工作了一次,第二次就失败了,所以我得到一个"reallocate base = ...“消息和6“重新分配失败基础= ...”消息

EN

回答 1

Stack Overflow用户

发布于 2015-06-07 21:13:51

在调用realloc之后,您忘记了重置arr->base的值。

使用:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    p = (int *)realloc(arr->base, arr->max*2*sizeof(int));
    if(p != NULL){
        arr->max *= 2;  
        arr->base = p; // Missing line
        cout<<"reallocate successful base = " << arr->base << endl;
    }else{
        cout<<"reallocate failed base = "<< arr->base <<endl;
    }
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30698463

复制
相关文章
Event ID 137、Event ID 141 报磁盘空间不足,但空间还有很多,读/写异常
Event ID 137 :卷 C: 上默认的事务资源管理器遇到不可重试的错误并且无法启动。该数据含有错误代码。
Windows技术交流
2023/04/18
2.5K1
听说aspera下载会失败,我也解决不了啊
其实就是解析url规律,然后构建上面的命令,需要替换的仅仅是 SRR5907429
生信技能树
2019/08/13
6.1K1
c++ realloc 自动扩充内存或减少内存
size_t pointer_count(void **papszStrList, size_t &items)
用户7886150
2021/02/15
6720
原创 | 顶会论文也漏引?不仅有,还很多!
作者:林嘉亮 本文约3000字,建议阅读10分钟本文重点阐述使用CRPSE对计算机科学顶会中的论文进行漏引检测的结果和分析。 学术研究是一个持续发展的过程。它在现有知识的基础上创造新知识,同时为未来研究打下基础。论文中的引用,体现的是过去与现在研究的联系。没有这种联系,就不会有知识的创造和积累。此外,引用赋予了学术研究的专业性。一方面,引用能够为读者提供相关领域的信息。这些信息加强了读者对当前工作的理解,使作者和读者达成了某种共识。另一方面,引用可以验证当前工作的可信度。恰当的引用表明作者对论文所涉及的领域
数据派THU
2023/05/18
2710
原创 | 顶会论文也漏引?不仅有,还很多!
C语言进阶——动态内存管理
  C/C++中的内存区域大体可划分为这三个部分:栈区、堆区以及静态区,这三块区域比较重要。比如我们的 main 函数就是在栈上开辟的空间,当然我们使用的一般变量也都是存储在栈区上的,但是栈区空间有限,不能存储较大的数据,此时我们会通过动态内存管理来为这些“大数据”在堆上开辟空间供其使用,用完后记得释放内存就好了,除了储存“大数据”外,在堆区上开辟的空间还可以随意改变其大小(扩大或缩小都可以)。由此可见动态内存开辟的实用性,要想实现动态内存开辟也不难,只需要跟着本文一步一步学习就好了!
北 海
2023/07/01
5280
C语言进阶——动态内存管理
VR或许会颠覆传统教育,但还有很多问题需要考虑
日前,我国教育部教育管理信息中心与微软中国共同宣布,将在全国范围内针对高校及中高职院校,启动VR教学应用培训及实验室建设项目。在沉寂了这么久之后,VR教育也许又要开始火热起来了。 此外,在今年1月底
VRPinea
2018/05/18
8590
C语言结构体用法很多,坑也很多
本文主要说的是C语言中的结构体,结构体是C语言中重要的一部分内容,也是C语言中常用的一种数据结构。
编程珠玑
2020/03/25
1.3K0
C语言之动态内存管理
然而,在实际应用中,我们需要向内存中申请动态(大小可变)的内存空间,因此本文向大家介绍有关于动态内存空间的知识。
摘星
2023/04/28
5850
C语言之动态内存管理
在推荐系统中,我还有隐私吗?联邦学习:你可以有
随着互联网覆盖范围的扩大,越来越多的用户习惯于在网上消费各种形式的内容,推荐系统应运而生。推荐系统在我们的日常生活中无处不在,它们非常有用,既可以节省时间,又可以帮助我们发现与我们的兴趣相关的东西。目前,推荐系统是消费领域最常见的机器学习算法之一[1]。以网络新闻为例,由于每天都有大量的新闻文章发布在网上,在线新闻服务的用户面临着严重的信息过载。不同的用户通常喜欢不同的新闻信息。因此,个性化新闻推荐技术被广泛应用于用户的个性化新闻展示和服务中。关于新闻的推荐算法 / 模型研究已经引起了学术界和产业界的广泛关注。
机器之心
2020/12/03
4.7K0
在推荐系统中,我还有隐私吗?联邦学习:你可以有
excel也那绘制词云图哦!还有很多的可视化图表可挑选!
excel是老牌的数据可视化软件了,很多方面都已经很完美了,很多的图表都可以轻松绘制出来,但如果想要做的好看,就需要一些技巧了。
Python与Excel之交
2021/08/05
6.6K0
【C语言】动态内存开辟的使用『malloc』
​ 所谓动态内存分配(Dynamic Memory Allocation)就是指在程序执行的过程中动态地分配或者回收存储空间的分配内存的方法。动态内存分配不象数组等静态内存分配方法那样需要预先分配存储空间,而是由系统根据程序的需要即时分配,且分配的大小就是程序要求的大小。
謓泽
2022/12/12
8280
【C语言】动态内存开辟的使用『malloc』
Mysql主主同步失败后的恢复
基础信息 主库: 数据库2 10.126.4.2 数据库3 10.126.4.3 1. 停止数据库3对外服务 防止同步过程中服务通过数据库3写入数据 $ firewall-cmd --remove-port=3306/tcp $ firewall-cmd --add-rich-rule="rule f amily="ipv4" source address="10.126.4.2" port protocol="tcp" port="3306" accept" $ firewall-cmd --rel
tonglei0429
2019/07/22
3K0
其实我不仅会 Spring Security,Shiro 也略懂一二!
和大家分享一个松哥原创的 Shiro 教程吧,还没写完,先整一部分,剩下的敬请期待。
江南一点雨
2021/04/22
9940
其实我不仅会 Spring Security,Shiro 也略懂一二!
空间信息在空间转录组中的运用
桑基图在单细胞数据探索中的应用 热图在单细胞数据分析中的应用 定量免疫浸润在单细胞研究中的应用 Network在单细胞转录组数据分析中的应用 你到底想要什么样的umap/tsne图?
生信技能树jimmy
2020/12/24
2K0
从大数据中「提炼」出商业见解,企业还有很多工作要做
编者按:随着互联网的普及化以及物联网的快速发展,人们产生的数据也越来越多。早几年前,马云就突出了当前是“DT”时代的说法。但数据的多并不代表着就是好事,只有被利用起来的数据才是好事。有人将数据称为是“
小莹莹
2018/04/23
7940
从大数据中「提炼」出商业见解,企业还有很多工作要做
POSTGRESQL 主节点失败后, 在多变的情况下重新让他融入复制中
POSTGRESQL 在主从流复制中,在主库失败切换后,从库变为主库后,如果主库不是因为硬件的原因,想继续拉起来,并且加入到新的复制关系中,一般都会通过pg_rewind的程序来进行拉起来. 但不少问题反馈对pg_rewind在重新拉起旧主库出现问题,到底有什么情况下pg_rewind对你的数据库重新建立复制关系"力不从心", 怎么去避免这样的情况是这篇文字要讨论和提到的.
AustinDatabases
2021/09/02
1.6K0
即使不懂单元测试,会用这个工具也够了~
Mockito 是一个强大的用于 Java 开发的模拟测试框架, 通过 Mockito 我们可以创建和配置 Mock 对象, 进而简化有外部依赖的类的测试.可以不进行外部依赖,快速进行Java的单元测试的进行。
测试小兵
2020/09/22
1.7K0
c语言进阶篇_动态内存管理(数组可以自动扩容?)
如果我们需要创建一个变量,可以直接通过类型名+变量名创建即可.此时会自动向内存申请该类型所需要的的字节空间,例如:int a=0;
初阶牛
2023/04/24
1.2K0
c语言进阶篇_动态内存管理(数组可以自动扩容?)
业界 | Elon Musk最感性专访:我期待失败,也期待真爱
选自Rolling Stone 作者:Neil Strauss 机器之心编译 参与:Edison Ke、Rik R、张震、邱陆陆 在这位发明者改变世界的计划里,他希望移居外太空,颠覆高速交通,重新发明
机器之心
2018/05/09
8670
业界 | Elon Musk最感性专访:我期待失败,也期待真爱
点击加载更多

相似问题

即使有足够的内存,realloc()/HeapRealloc()也会失败

36

即使页面上还有很多空间,我的GridView也可以滚动

11

即使内存中有更多空间,应用程序安装也会失败

23

如何重新分配内存,即使realloc()在c++中失败

11

即使我还有大约80MB的内存,也会触发对applicationDidReceiveMemoryWarning的假调用

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文