免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1624 | 回复: 3
打印 上一主题 下一主题

[C++] 内存溢出,请朋友们帮忙过眼!(已解决,谢谢关注) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-07-15 18:55 |只看该作者 |倒序浏览
程序运行之后,内存不停往上增加,不知道问题出现在哪里,又没有用到new操作符,打开了文件也关了,找不到原因啊,麻烦朋友们帮忙诊断一下:

#include <string.h>
#include <stdio.h>
#include <windows.h>

#define FILE_ERROR    -1
#define NOT_FOUND    0
#define SIZE        1024

//去空格

char * trim(char * ptr)
{
    int start,end,i;
    if (NULL != ptr)
    {
        for(start=0; isspace(ptr[start]) && ptr[start]!='\0'; start++)
            ;
        for(end=strlen(ptr)-1; isspace(ptr[end]) && end>=0; end--)
            ;
        //传递进来的字符串全部是空格,返回""

        if (end < 0)
        {
            ptr[0] = '\0';
        }
        else    //存在其他字符

        {
            for(i=start; i<=end; i++)
                ptr[i-start]=ptr[i];
            ptr[end-start+1]='\0';
        }
        return (ptr);
    }
    else
        return NULL;
}

int findString(char * fileName,
             char * findString,
             char * returnMsg,
             bool careCase)
{
    int returnValue = 0;
    int findFlag = 0;
    FILE * file;
    if (NULL == (file=fopen(fileName, "r")))
    {
        printf("函数getInfo()中文件 %s 打开失败或不存在!\n", fileName);
        SetLastError(FILE_ERROR);
        return 0;
    }
    char buf[SIZE];
    char * value;
    while (NULL != fgets(buf, SIZE, file))
    {
        returnValue++;
        trim(buf);
        if (!strcmp(buf, ""))
            continue;
        value = strstr(buf, findString);
        if (value != NULL)
        {
            strcpy(returnMsg, buf);
            findFlag = 1;
            break;
        }
    }
    fclose(file);
    if (!findFlag)
    {
        SetLastError(NOT_FOUND);
        return 0;
    }
    return returnValue;
}


void fun()
{
    int i;
    char buf[1024];
    HANDLE hFind;
    WIN32_FIND_DATA FindFileData;
    char file[256];
    while (1)
    {
        //printf("while\n");

        hFind = FindFirstFile(".\\config\\*.xml", &FindFileData);
    LOOP:
        sprintf(file, ".\\config\\%s", FindFileData.cFileName);
        //strcpy(file, ".\\config\\");

        //strcat(file, FindFileData.cFileName);

        i = findString(file, "sdfcpp", buf, true);
        if (FindNextFile(hFind, &FindFileData) != 0)
            goto LOOP;
        else
            continue;
    }
}

void main()
{
    fun();
}


[ 本帖最后由 hinku 于 2008-7-15 21:09 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2008-07-15 19:47 |只看该作者
FindFirstFile、FindNextFile没有源代码.在某些情况下程序进入死循环,楼主运行都没看到?
ps:不要用goto来实现循环,即使它意义很明确.
终于座了一把沙发,爽

论坛徽章:
0
3 [报告]
发表于 2008-07-15 20:56 |只看该作者
io过于频繁了,findString中。另外习惯不好,char buf[SIZE];这样的最好char buf[SIZE] = 『0』;另外不知道你的意图,所以不知道怎么优化,但是io最好不要放在fun的那个大循环里,能缓存最好先读进缓存。

论坛徽章:
0
4 [报告]
发表于 2008-07-15 21:08 |只看该作者
已经解决了,问题在FindFirstFile、FindNextFile之后要调用FindClose(hFind);
谢谢朋友们这么热心啊

另外FindFirstFile、FindNextFile、FindClose(hFind)是windows下面的函数,不好意思啊,来这里问
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP