Кидает исключение при попытки отправить размер массива

Пытаюсь передать файл по 1024, но кидает исключение

нарушение прав доступа при чтении по адресу 0x0069E2FC

    for (long i = 0; i < lSize; i += 1024) {
    if (lSize - i < 1024) {
        MAXSIZE = lSize - i;
        char* buffer = (char*)malloc(MAXSIZE + 1);
        buffer[MAXSIZE] = '\0';
        fseek(ptrFile, i, SEEK_SET);
        fread(buffer, 1, MAXSIZE, ptrFile);

        send(conn[i], (char*)&MAXSIZE, sizeof(long), 0);
        while (f != 1) {
            std::cout << "\nAccept\n";
            recv(conn[i], (char*)&f, sizeof(int), 0);
        }
        send(conn[i], buffer, MAXSIZE, 0);
        std::cout << "\nSend " << i << "/" << lSize;
        break;
    }

server

int SendFile(std::string pathToFile, std::string files, int i) {
   SendPacket(sendF, i);
   FILE* ptrFile = fopen(pathToFile.c_str(), "rb");
   if (ptrFile == NULL)
   {
       fputs("1", stderr);
       exit(1);
   }
   // определяем размер файла
   fseek(ptrFile, 0, SEEK_END);                          
   long lSize = ftell(ptrFile);                            
   rewind(ptrFile);                                       



   send(conn[i], (char*)&lSize, sizeof(long), 0);


   int msgsize = files.size();
   send(conn[i], (char*)&msgsize, sizeof(int), 0);
   send(conn[i], files.c_str(), msgsize, 0);


   msgsize = pathToFile.size();
   send(conn[i], (char*)&msgsize, sizeof(int), 0);
   send(conn[i], pathToFile.c_str(), msgsize, 0);

   long MAXSIZE = 1024;
   char* buffer = (char*)malloc(MAXSIZE + 1); // выделить память для хранения содержимого файла
   if (buffer == NULL)
   {
       fputs("2", stderr);
       exit(2);
   }
   int f = 0;
   buffer[MAXSIZE] = '\0';
   for (long i = 0; i < lSize; i += 1024) {
       if (lSize - i < 1024) {
           MAXSIZE = lSize - i;
           char* buffer = (char*)malloc(MAXSIZE + 1);
           buffer[MAXSIZE] = '\0';
           fseek(ptrFile, i, SEEK_SET);
           fread(buffer, 1, MAXSIZE, ptrFile);

           send(conn[i], (char*)&MAXSIZE, sizeof(long), 0);
           while (f != 1) {
               std::cout << "\nAccept\n";
               recv(conn[i], (char*)&f, sizeof(int), 0);
           }
           send(conn[i], buffer, MAXSIZE, 0);
           std::cout << "\nSend " << i << "/" << lSize;
           break;
       }
       fseek(ptrFile, i, SEEK_SET);
       fread(buffer, 1, MAXSIZE, ptrFile);
       std::cout << "\nMAXSIZE " << MAXSIZE << "\n";
       send(conn[i], (char*)&MAXSIZE, sizeof(long), 0);

       while (f != 1) {
           std::cout << "\nAccept\n";
           recv(conn[i], (char*)&f, sizeof(int), 0);
       }
       send(conn[i], buffer, MAXSIZE, 0);
       std::cout << "\nSend " << i << "/" << lSize;
   }
   fclose(ptrFile);
   recv(conn[i], (char*)&f, sizeof(int), 0);
   return 1;
}

client

void SaveFile()
{
   std::cout << "START\n";
   register long sizeF;
   recv(conn, (char*)&sizeF, sizeof(long), 0);

   int msgsize;

   recv(conn, (char*)&msgsize, sizeof(int), 0);

   char* buffer = (char*)malloc(msgsize + 1);
   buffer[msgsize] = '\0';

   recv(conn, buffer, msgsize, 0);
   std::string gile = buffer;
   free(buffer);


   recv(conn, (char*)&msgsize, sizeof(int), 0);

   buffer = (char*)malloc(msgsize + 1);
   buffer[msgsize] = '\0';

   recv(conn, buffer, msgsize, 0);
   gile += GetNameFileMy(buffer);
   free(buffer);

   //прием
   FILE* ptrFile = fopen(gile.c_str(), "wb");
   long mxs = 1024;
   int i = 1;
   buffer = (char*)malloc(mxs + 1);
   buffer[mxs] = '\0';
   do {
       recv(conn, (char*)&mxs, sizeof(long), 0);
       if (mxs == 1024)
       {
           std::cout << mxs << "\n";

           send(conn, (char*)&i, sizeof(int), 0);

           recv(conn, buffer, mxs, 0);
           fwrite(buffer, 1, mxs, ptrFile);
       }
       else {
           std::cout << mxs << "\n";
           free(buffer);
           buffer = (char*)malloc(mxs + 1);
           buffer[mxs] = '\0';

           send(conn, (char*)&i, sizeof(int), 0);

           recv(conn, buffer, mxs, 0);
           fwrite(buffer, 1, mxs, ptrFile);
           free(buffer);
           break;
       }
   } while (true);
   fclose(ptrFile);
   send(conn, (char*)&i, sizeof(int), 0);
}

Ответы (1 шт):

Автор решения: AlexGlebe

У вас переменная i цикла for (long i = 0; i < lSize; i += 1024) затеняет переменную аргумента функции int SendFile(std::string pathToFile, std::string files, int i).

А также char* buffer = (char*)malloc(MAXSIZE + 1); затеняется (нет доступа) из-за char* buffer = (char*)malloc(MAXSIZE + 1); внутри цикла for (long i = 0; i < lSize; i += 1024)

Дайте этим переменным разные имена. Предупреждение компилятора будет с ключом -Wshadow.

→ Ссылка