Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/21: Рейтинг темы: голосов - 21, средняя оценка - 4.57
3 / 3 / 0
Регистрация: 03.12.2014
Сообщений: 78

Ошибка - invalid allocation size: 4294967292 bytes

22.03.2016, 16:55. Показов 4546. Ответов 7
Метки c++ (Все метки)

Студворк — интернет-сервис помощи студентам
Выполняю лабораторную работу №6 в методичке (прикрепил ее в посте), там программа - Многопроцессная обработка данных. Саму программу можно отсюда скачать - https://yadi.sk/d/_aJKss2UqPVfo Полностью перенес код, подключил EvryThng.h. В общем ошибок таких нет, но при компилировании в Visual Studio 10, invalid allocation size: 4294967292 bytes. При нажатии по кнопке Retry, показывается строка кода из dbgheap.c :
C++
1
2
3
4
5
6
7
8
9
/* Diagnostic memory allocation from this point on */
 
                if (nSize > (size_t)(_HEAP_MAXREQ - nNoMansLandSize - sizeof(_CrtMemBlockHeader)))
                {
                    _RPT1(_CRT_ERROR, "Invalid allocation size: %Iu bytes.\n", nSize);
                    if (errno_tmp)
                    {
                        *errno_tmp = ENOMEM;
                    }
Понятно, что nSize стало больше, чем size_t, но хотелось бы понять причину. После нажатия Retry выводится еще одно сообщение ошибки - Необработанное исключение в "0x568bbde8 (msvcr100d.dll)" в "lab6(1).exe": 0xC0000005: Нарушение прав доступа при чтении "0x003a0044". Ехе скомпилированной программы прикрепил в архиве. Может подскажите в чем может быть проблема? Ведь методичка на старой версии VS 10 и ОС тоже.
Код основной программы:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
// lab6(1).cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include "EvryThng.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#define BUF_SIZE 256
#endif
static VOID cat(LPTSTR, LPTSTR);
int _tmain (DWORD argc, LPTSTR argv [])
/* Создает отдельный процесс для каждого файла из командной строки.
результатов предоставляется временный файл в текущем каталоге. */
{
HANDLE hTempFile;
BOOL prov;
TCHAR outFile[MAX_PATH + 100];
SECURITY_ATTRIBUTES StdOutSA =
/* права доступа для наследуемого дескриптора. */
{sizeof (SECURITY_ATTRIBUTES), NULL, TRUE};
TCHAR CommandLine [MAX_PATH + 100];
STARTUPINFO StartUpSearch, StartUp;
PROCESS_INFORMATION ProcessInfo;
DWORD iProc, ExCode;
HANDLE *hProc;
/* Указатель на массив дескрипторов процессов. */
typedef struct {TCHAR TempFile [MAX_PATH];}
PROCFILE;
PROCFILE *ProcFile;
/* Указатель на массив имен временных файлов. */
/* Информация запуска для каждого дочернего процесса поиска и для
процесса, который будет выводить результаты. */
GetStartupInfo (&StartUpSearch);
GetStartupInfo (&StartUp);
/* Зарезервировать место для массива структур данных процессов,
содержащих дескриптор процесса и имя временного файла. */
ProcFile = (PROCFILE *)malloc ((argc - 2) *sizeof (PROCFILE));
hProc = (HANDLE *)malloc ((argc-2) *sizeof (HANDLE));
/* Создать отдельный процесс "grep" для каждого файла из командной
строки*/
for (iProc = 0; iProc < argc - 2; iProc++)
{/* Создать командную строку вида grep argv [1] argv [iProc + 2] */
_stprintf (CommandLine, _T ("%s%s%s"),
_T ("grep "), argv [1] , argv [iProc + 2]);
_tprintf(_T("%s\n"),CommandLine);
if (GetTempFileName (_T ("."), _T ("gtm"), 0,
ProcFile [iProc].TempFile) == 0)
/* Указываем стандартный вывод для процесса поиска. */
hTempFile = /* Этот дескриптор наследуемый */
CreateFile (ProcFile [iProc].TempFile, GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE, &StdOutSA,
CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL, NULL);
StartUpSearch.dwFlags = STARTF_USESTDHANDLES;
StartUpSearch.hStdOutput = hTempFile;
StartUpSearch.hStdError = hTempFile;
StartUpSearch.hStdInput = GetStdHandle (STD_INPUT_HANDLE) ;
/* Создаем процесс для выполнения командной строки. */
CreateProcess (NULL, CommandLine, NULL, NULL,
TRUE, 0, NULL, NULL, &StartUpSearch, &ProcessInfo);
/* Закрываем ненужные дескрипторы */
CloseHandle (hTempFile) ;
CloseHandle (ProcessInfo.hThread) ;
/* Сохраняем дескриптор процесса. */
hProc [iProc] = ProcessInfo.hProcess;
}/* Все процессы выполняются, подождем их завершения. */
for (iProc = 0; iProc < argc-2; iProc += MAXIMUM_WAIT_OBJECTS)
WaitForMultipleObjects (min (MAXIMUM_WAIT_OBJECTS, argc - 2
-iProc),
&hProc[iProc] , TRUE, INFINITE);
/* Результирующие файлы отсылаются на стандартный вывод с
помощью "cat". */
for (iProc = 0; iProc < argc - 2; iProc++)
{
printf("Proc= %d\n", iProc);
prov=GetExitCodeProcess (hProc [iProc], &ExCode);
if(ExCode != 0) DeleteFile (ProcFile [iProc].TempFile);
if (GetExitCodeProcess (hProc [iProc], &ExCode) && ExCode == 0)
{/* Образец найден - показать результаты. */
if (argc > 3) _tprintf (_T ("%s : \n" ), argv [iProc+2]);
fflush (stdout) ;
/* требуется для использования стандартного вывода
несколькими процессами */
_stprintf (outFile, _T("%s"),ProcFile[iProc].TempFile);
cat( argv[iProc+2], (LPTSTR) outFile);
_stprintf (CommandLine, _T("%s%s"),
_T ("cat "), ProcFile[iProc].TempFile);
_tprintf(_T("%s\n"),CommandLine);
CreateProcess (NULL, CommandLine, NULL, NULL,
TRUE, 0, NULL, NULL, &StartUp, &ProcessInfo);
WaitForSingleObject (ProcessInfo.hProcess, INFINITE);
CloseHandle (ProcessInfo.hProcess);
CloseHandle (ProcessInfo.hThread);
}
CloseHandle (hProc [iProc] );
/*DeleteFile (ProcFile [iProc].TempFile); */
} free (
ProcFile);
free (hProc) ;
return 0;
} static VOID cat(LPTSTR hInFile, LPTSTR hOutFile)
{ CopyFile( hInFile, hOutFile, FALSE);
return;
}
Вложения
Тип файла: rar lab6(1).rar (10.3 Кб, 11 просмотров)
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.03.2016, 16:55
Ответы с готовыми решениями:

Invalid allocation size 4294967295 bytes
Здравствуйте! Пытаюсь реализовать алгоритм обхода Грэхема. При запуске приложения появляется критическая ошибка: Invalid allocation size...

Указатели, Динамическое выделение памяти, Ошибка invalid allocation size
Есть задание: Есть решение: #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;time.h&gt; void func(int **a,int lines,int...

Считывание чисел из файла в массив и ошибка: "Invalid allocation size: 4294967295 byte"
Всем привет. Есть два вопроса. 1. Нужно считать из txt файла числа в массив столбцов и строк. Код вроде правильный, но пишет...

7
73 / 69 / 38
Регистрация: 09.10.2012
Сообщений: 238
22.03.2016, 20:04
С какими параметрами запускаете программу? Скорее всего проблема в
C
1
malloc ((argc - 2) *sizeof (PROCFILE));
если argc < 2.
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
22.03.2016, 20:31
РичардЗорг, вы сами что-то понимаете в таком коде?
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12937 / 6804 / 1821
Регистрация: 18.10.2014
Сообщений: 17,222
22.03.2016, 21:37
Цитата Сообщение от РичардЗорг Посмотреть сообщение
Понятно, что nSize стало больше, чем size_t, но хотелось бы понять причину.
Причина заключается в том, что вы попросили функцую выделения памяти выделить вам отрицательное количество памяти. Вот она и удивилась такому запросу.
0
3 / 3 / 0
Регистрация: 03.12.2014
Сообщений: 78
23.03.2016, 17:17  [ТС]
Цитата Сообщение от mishelle92 Посмотреть сообщение
С какими параметрами запускаете программу? Скорее всего проблема в
CВыделить код
1
malloc ((argc - 2) *sizeof (PROCFILE));
если argc < 2.
mishelle92, Я без каких либо параметров запускал, просто через студию, запустил отладчик и стала выдаваться данная ошибка

Во время отладки ошибка на строке
C++
1
hProc = (HANDLE *)malloc ((argc-2) *sizeof (HANDLE));
Значение argc = 1, до перехода к этой строке. Изменив вручную во время отладки на 3, ошибка по поводу размера не вылетала, теперь осталась еще 2-ая - выскакивает после перехода к этой строчке кода:
C++
1
_tprintf(_T("%s\n"),CommandLine);
Необработанное исключение в "0x555bbde8 (msvcr100d.dll)" в "lab6(1).exe": 0xC0000005: Нарушение прав доступа при чтении "0x003a0044".

Добавлено через 6 часов 28 минут

Если argc =2, ошибок нет, программа завершилась без ошибки.
0
73 / 69 / 38
Регистрация: 09.10.2012
Сообщений: 238
23.03.2016, 20:17
Лучший ответ Сообщение было отмечено РичардЗорг как решение

Решение

Цитата Сообщение от РичардЗорг Посмотреть сообщение
Если argc =2, ошибок нет, программа завершилась без ошибки.
Не надо вручную задавать значение этой переменной. argc - количество переданных программе аргументов + 1 (учитывая, что первым параметром передается имя программы), вопрос про это, например, был тут. Соответственно, чтобы в строке
C++
1
hProc = (HANDLE *)malloc ((argc-2) *sizeof (HANDLE));
не было ошибки, нужно передать программе хотя бы один аргумент. Что именно передавать вашей программе - читайте в методичке. Можно задать в настройках проекта запуск отладки с определенными параметрами (вроде бы в разделе Debugging).

Не факт, что это единственная ошибка, просто сразу бросилась в глаза. Всю программу не смотрел, т.к. воспринимается она сложно). Надеюсь, что это код не из методички.
1
3 / 3 / 0
Регистрация: 03.12.2014
Сообщений: 78
24.03.2016, 12:50  [ТС]
mishelle92 не было ошибки, нужно передать программе хотя бы один аргумент.
Попробую тогда повызывать программу из cmd

Добавлено через 11 часов 30 минут
Все тему можно закрывать.
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
24.03.2016, 19:26
Цитата Сообщение от РичардЗорг Посмотреть сообщение
Все тему можно закрывать.
Закрыто.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.03.2016, 19:26
Помогаю со студенческими работами здесь

Код при компиляции пишет ошибку: "Invalid allocation size: 4294967295 byte"
#include&lt;iostream&gt; #include&lt;fstream&gt; #include&lt;stdio.h&gt; using namespace std; struct list{ int d; list *next;}; int...

Оператор delete(ошибка) - free(): invalid next size (fast): 0x098f7008 ***
Делаю некое подобие функции itoa: char* c_itoa(int,char*,int):Реализацию сделал так(упрощённый вид):char* c_itoa(int number,char*...

Allowed memory size of 134217728 bytes exhausted (tried to allocate 46704001 bytes)
Вот такая проблема возникает при загрузке изображения, проблему устранил, но таким путём, которые мне не очень нравится. Суть такая,...

Fatal error: Allowed memory size of 16777216 bytes exhausted (tried to allocate 1572864 bytes)
Доброго времени суток уважаемые участники форума. Не так давно взялся за тех. поддержку сайта клиента, проблема в том, что на серваке...

Memory Allocation Request Exceeded 65,000 Bytes
В документе несколько Rich Text с одним названием (в нем текст и картинки) Client_Task_Files ..... Client_Task_Files Dup Item...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru