获取内存溢出?

问题描述

我不太确定为什么。但是我通过网络连接发送的文件出现内存溢出。

我使用 send.txt 作为一个测试文件,其中包含几百万位数的 pi 从客户端发送到服务器,第一次运行效果很好。文件复制没有错误,但如果我尝试再次发送同一个文件,它会像以前一样重写文件,但会出现内存溢出? p

我应该提到服务器端是多线程的,如果这很重要的话,可以同时允许多个连接。我不认为会,但我认为那会是相关信息。

服务器


    void write_file(int sockfd)
    {
        FILE *fp;
        char fileName[100] = {0};
        char fileLenStr[100] = {0};
        int fileLen;
        char byte[1] = {0};
        char *buffer;
        while (1) 
        {
            read(sockfd,byte,1);
            if (byte[0] == 32) 
            {
                break;
            }
            size_t len = strlen(fileName);
            printf("%s\n",fileName);
            if (len == 0) 
            {
                fileName[0] = byte[0];
            } 
            else 
            {
                fileName[len++] = byte[0];
                len = strlen(fileName);
                fileName[len++] = '\0';
            }
        }
        while (1) 
        {
            size_t len;
            read(sockfd,1);
            if (byte[0] == 32) 
            {
                len = strlen(fileLenStr);
                break;
            }
            len = strlen(fileLenStr);
            printf("%ld\n",len);
            if (len == 0) 
            {
                fileLenStr[0] = byte[0];
            } 
            else 
            {
                fileLenStr[len++] = byte[0];
                len = strlen(fileLenStr);
                fileLenStr[len++] = '\0';
            }
        }
        printf("%s\n",fileName);
        fileLen = atoi(fileLenStr);
        buffer = (char *)malloc(fileLen * sizeof(char));
        read(sockfd,buffer,(fileLen * sizeof(char)));
        fp = fopen(fileName,"w");
        fwrite(buffer,1,strlen(buffer),fp);
        fclose(fp);
        free(buffer);
        return;
    }

客户

    void pushFile(char *fileName,int clientSocket)
    {
        char cmd[60] = {0};
        char *data;
        char response[4];
        FILE *fp;
        struct stat stats;
        int intfileSizeinBytes;
        char fileSizeinBytes[10];
        int st = stat(fileName,&stats);
        if(st == -1)
        {
            printf("Error in stat method...\n");
        } 
        else 
        {
            intfileSizeinBytes = (int)stats.st_size;
            sprintf(fileSizeinBytes,"%d",intfileSizeinBytes);
        }
        fp = fopen(fileName,"rb");
        if(fp == NULL)
        {
            printf("File can't be opened...\n");
            exit(0);
        }
        data = (char *)malloc(intfileSizeinBytes * sizeof(char));
        fread(data,intfileSizeinBytes,fp);
        //remove(fileName);
        fclose(fp);
        printf("FILENAME: %s\n",fileName);
        sprintf(cmd,"PUSH %s %d ",fileName,intfileSizeinBytes);
        int w = send(clientSocket,cmd,strlen(cmd),0);
        
        w = send(clientSocket,data,strlen(data),0);
        free(data);
        return;

}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)