| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1611 人关注过本帖
标题:求教,请问这个程序存在内存泄漏嘛?
只看楼主 加入收藏
mk_zhou
Rank: 2
来 自:历代兵家必争之地
等 级:论坛游民
威 望:1
帖 子:78
专家分:83
注 册:2015-6-30
结帖率:84.62%
收藏
已结贴  问题点数:20 回复次数:4 
求教,请问这个程序存在内存泄漏嘛?
程序代码:
#include<iostream>
#include<iomanip>
#include<cmath>

int main()
{
    size_t max{};
    size_t count{ 3 };
    std::cout << "How many primes would you like? ";
    std::cin >> max;
    unsigned long long* primes{ new unsigned long long{max} };
    *primes = 2uLL;
    *(primes + 1) = 3uLL;
    *(primes + 2) = 5uLL;
    unsigned long long trial{ *(primes + 2) };
    bool isprime{ false };
    unsigned long long limit{};
    do
    {
        trial += 2;
        limit = static_cast<unsigned long long>(std::sqrt(trial));
        size_t i{};
        do
        {
            
            isprime = trial % *(primes + i) > 0;
        } while ( primes[++i] <= limit && isprime);

        if (isprime)
        {
            *(primes + count++) = trial;
        }
    } while (count < max);
    for (size_t i{}; i < max; ++i)
    {
        std::cout << std::setw(10) << *(primes + i);
        if ((i+1)%10==0)
        {
            std::cout << std::endl;
        }
    }
    std::cout << std::endl;
    delete[] primes;
    primes = nullptr;
}


运行后会提示异常,看了一下输出中有抛出下面的提示,但检查代码,没有发现问题在哪。。。
HEAP CORRUPTION DETECTED: after Normal block (#190) at 0x006AF5B0.
CRT detected that the application wrote to memory after end of heap buffer.


(Press Retry to debug the application)

搜索更多相关主题的帖子: max std cout unsigned long 
2018-05-29 23:44
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:20 
new unsigned long long{max}
应该是
new unsigned long long[max]


不过代码应该永远不出现自己管理内存的事儿。
2018-05-30 08:17
mk_zhou
Rank: 2
来 自:历代兵家必争之地
等 级:论坛游民
威 望:1
帖 子:78
专家分:83
注 册:2015-6-30
收藏
得分:0 
回复 2楼 rjsp
谢谢,确实是[]符号写错了,自己检查时一直没看出来。。。

仰望星空,看看有没有馅饼落下
2018-05-30 10:53
kwer
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2018-6-13
收藏
得分:0 
你没有用到类似malloc 这样在堆上申请内存就不会存在内存泄漏,你的内存都是在栈上面,顶多把栈撑穿了也不会内存泄漏。
2018-06-13 12:40
快速回复:求教,请问这个程序存在内存泄漏嘛?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023539 second(s), 11 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved