| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3059 人关注过本帖
标题:请教:生成的exe文件一闪而过,该怎么解决?
只看楼主 加入收藏
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
C:\Windows\system32\cmd.exe /c C:\Users\StarWing\Desktop\dev\t
please input the data of fruit's heap:12
please input every heap'weight:1 2 3 4 5 6 7 8 9 10 11 12
the gross of duoduo'work is:363


shell returned -1073741819
Hit any key to close this window...



注意这个返回值,很明显你的程序内存泄露了。

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-10-20 13:06
欧阳君雅
Rank: 1
等 级:新手上路
帖 子:71
专家分:0
注 册:2008-9-29
收藏
得分:0 
哦,我现在加了free(head);把申请的空间都释放了,还是一样。
2008-10-20 13:09
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
int的大小在不同的机器上是不固定的,你写个2,不出错才怪!!
帮你改过来了,现在应该可以暂停了,还有,分配多少释放多少,好习惯。

哎,你代码写得太糟糕了,帮你改了一点儿,以后写东西,注意一下风格!!
程序代码:
#include"stdio.h"
#include"stdlib.h"
int main()
{
    int *p, *head;
    int n, i, j, temp;
    long SUM = 0;
    printf("please input the data of fruit's heap:");
    scanf("%d", &n);
    p = (int *)calloc(sizeof(int), n);
    head = p;
    printf("please input every heap'weight:");
    for (i = 0; i < n; i++)
        scanf("%d", p + i);

    for (i = 1; i < n; i++)
        for (j = 1; j < n; j++)
        {
            if (p[j - 1] > p[j])
            {
                temp = p[j];
                p[j] = p[j - 1];
                p[j - 1] = temp;
            }
        }

    for (i = n; i >= 1; i--)
        SUM += (*p++) * i; //就用这一个循环解决问题
    SUM -= *head;
    printf("the gross of duoduo'work is:%ld\n\n\n", SUM);
    free(head);
    system("pause");
    return 0;
}





[[it] 本帖最后由 StarWing83 于 2008-10-20 13:23 编辑 [/it]]

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-10-20 13:14
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
最后说明一下,那个很大的负数返回值,换成16进制就是0xC0000005,我猜想C代表错误,那么错误号就是0005,查找MSDN的错误编号System Error Number,得到5号错误是:Access is denied. 也就是访问了不该访问的内存,32位机器int值为4字节,你只分配了2个字节,需要的空间比分配的空间大一倍,理所当然是出现这个错误了。以后如果返回值不正常知道怎么办了吧?

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-10-20 13:17
hap487
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2008-10-15
收藏
得分:0 
楼上说的好
可是我的原代码输进去也行了啊
右击.c文件--属性--程序--去掉“退出时关闭”复选项应该就好了,试试吧!
2008-10-20 13:24
欧阳君雅
Rank: 1
等 级:新手上路
帖 子:71
专家分:0
注 册:2008-9-29
收藏
得分:0 
我用的是联想的笔记本,呜呜。。。不会截图了。。。
版主,你那个“shell returned -1073741819”是怎么得到的?
2008-10-20 13:40
欧阳君雅
Rank: 1
等 级:新手上路
帖 子:71
专家分:0
注 册:2008-9-29
收藏
得分:0 
25楼的同学:右击.c文件--属性--只有一个“常规”选项啊,没有你说的“程序”选项啊
2008-10-20 13:42
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
我那个啊?
我那个是VIM自己提供的功能~~如果你用Code::Block也会提供这个功能的。
代码写的挺烂的,我帮你彻底改了一下,哎……qsort非要写cmp函数吗?郁闷……

程序代码:
#include <stdio.h>
#include <stdlib.h>

int comp_int(const void *lv, const void *rv)
{
    return *(int*)lv - *(int*)rv;
}

int main()
{
    int i, *arr, n, sum;
    
    printf("please input the data of fruit's heap:");
    scanf("%d", &n);
    arr = (int *)malloc(n * sizeof(int));
    printf("please input every heap'weight:");
    for (i = 0; i < n; i++)
        scanf("%d", &arr[i]);

    qsort(arr, n, sizeof(int), comp_int);
    for (i = 0, sum = 0; i < n; i++)
        sum += arr[i] * (n - i);
    sum -= arr[0];
    free(arr);

    printf("the gross of duoduo'work is:%d\n", sum);
    system("pause");
    return 0; 
}



专心编程………
飞燕算法初级群:3996098
我的Blog
2008-10-20 13:44
欧阳君雅
Rank: 1
等 级:新手上路
帖 子:71
专家分:0
注 册:2008-9-29
收藏
得分:0 
int comp_int(const void *lv, const void *rv)
{
    return *(int*)lv - *(int*)rv;
}
qsort(arr, n, sizeof(int), comp_int);

你的数组排序就用这两句话搞定啦,怎么回事啊?我没弄明白,qsort是库函数吗?
2008-10-20 13:52
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
恩,库函数,而且速度比冒泡快多了,你以后学习数据结构就知道了

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-10-20 13:55
快速回复:请教:生成的exe文件一闪而过,该怎么解决?
数据加载中...
 
   



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

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