Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
BeginerInt
0 / 0 / 0
Регистрация: 08.02.2017
Сообщений: 26
1

Invalid error size

27.02.2017, 20:24. Просмотров 884. Ответов 14
Метки нет (Все метки)

Ошибка выпадает при поиске файлов.
В коде получаю хандле файла,проверяем ,если хандле больше нуля,тогда выделяем память.
вот скрин ошибки.
0
Миниатюры
Invalid error size  
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.02.2017, 20:24
Ответы с готовыми решениями:

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

Ошибка - invalid allocation size: 4294967292 bytes
Выполняю лабораторную работу №6 в методичке (прикрепил ее в посте), там...

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

Указатели, Динамическое выделение памяти, Ошибка invalid allocation size
Есть задание: Есть решение: #include <stdio.h> #include <stdlib.h>...

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

14
DemolitionMan
129 / 155 / 87
Регистрация: 06.04.2016
Сообщений: 992
27.02.2017, 20:29 2
Код в студию!

Добавлено через 16 секунд
И в какой строке ошибка.

Добавлено через 1 минуту
А что это за диск такой на скрине: C-N?
0
BeginerInt
0 / 0 / 0
Регистрация: 08.02.2017
Сообщений: 26
27.02.2017, 20:37  [ТС] 3
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
void poisk(string papka)
{
    ZAP zap;
    string path =papka + "\\*";
    WIN32_FIND_DATA FindData;
    int kluch = 32;
    void * klu = "123456";
 
    if (!zap.pro(klu, kluch)) {
        cout << "zap pro failed";
        return;
    }
 
    setlocale(LC_ALL, "Russian");
    
    HANDLE file = FindFirstFile(path.c_str(), &FindData);
    if (file == INVALID_HANDLE_VALUE)
    {
        cout << "uvy \n " << endl;
        
    }
 
    else
    {
        do
 
            if (strcmp(FindData.cFileName, ".")  && strcmp(FindData.cFileName, "..") != 0) {
            string new_path = papka + "" + FindData.cFileName;
 
                if (FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
                {
 
                    
                       poisk(new_path) ;
 
                }
                    
 
                else
 
                {
                    HANDLE f = GetFileHandle(new_path.c_str());
                                    DWORD fileSize = GetFileSize(f,NULL);
                                        if(fileSize > 0)
                                        {
                                            
                                    cout<< new_path << endl;
                                    void *in =malloc(fileSize);
                                    
                    
        
                    if (ReadFromFile(new_path.c_str(),in , fileSize))
                    {
                        if (!zap.Delaem( in, fileSize)) {
                            cout << ("zap delaem failed\n");
                            return;
                        }
                        if (WriteToFile(new_path.c_str(), zap.data(), zap.size())) {
                            cout << "write to file failed: \n";
                            return;
                        }
                        cout <<  path.c_str() << "Delaem" << endl;  
                        }
                        free(in);   
                        CloseHandle(f);
                    }
                    
                }
            }
        while (FindNextFile(file, &FindData) != 0);
        
    }
    FindClose(file);
 
}
 
 
int _tmain()
{
 
   
    poisk("D:");
   cout<<"Поиск Завершён!"  << endl;
    system("PAUSE");
    return 0;
}
C это локальный диск ,N Это имя компьютера.
0
DemolitionMan
129 / 155 / 87
Регистрация: 06.04.2016
Сообщений: 992
27.02.2017, 20:59 4
Пара вопросов:
1) Что такое тип ZAP вначале этой программы?
2) В какой строке ошибка?
3) Зачем эта строка:
C++
1
if(strcmp(FindData.cFileName, ".")  && strcmp(FindData.cFileName, "..") != 0) {
Добавлено через 2 минуты
Т.е. FindData.cFileName должно быть больше чем "." и ".."?

Добавлено через 2 минуты
Цитата Сообщение от BeginerInt Посмотреть сообщение
C++
1
string new_path = papka + "" + FindData.cFileName;
- вот в этой строке, случайно не так надо писать?
C++
1
string new_path = papka + "" + FindData.cFileName;
0
BeginerInt
0 / 0 / 0
Регистрация: 08.02.2017
Сообщений: 26
27.02.2017, 20:59  [ТС] 5
тип zap это тип класса.
ошибка в строке: 248 ,как раз где выделяется память.
Эта строка проверяет в хождение папки.
C++ (Qt)
1
if(strcmp(FindData.cFileName, ".")  && strcmp(FindData.cFileName, "..") != 0)
0
DemolitionMan
129 / 155 / 87
Регистрация: 06.04.2016
Сообщений: 992
27.02.2017, 21:02 6
28 строка, так надо?
C++
1
string new_path = papka + "(двойной обратный слэш)" + FindData.cFileName;
Добавлено через 1 минуту
Цитата Сообщение от BeginerInt Посмотреть сообщение
ошибка в строке: 248 ,как раз где выделяется память.
- а если мерять теми строками что пронумеровались здесь?
0
Evg
Эксперт CАвтор FAQ
19289 / 7148 / 528
Регистрация: 30.03.2009
Сообщений: 20,000
Записей в блоге: 30
27.02.2017, 21:03 7
Сие число 4294967294 есть 0xFFFFFFFE, что в свою очередь есть -2 в 32-битном знаковом случае. А эта цифирь в свою очередь смахивает на код ошибки. Мне лень было вникать в описание GetFileSize, но, вероятно, ты как-то не так ею пользуешься
0
DemolitionMan
129 / 155 / 87
Регистрация: 06.04.2016
Сообщений: 992
27.02.2017, 21:05 8
Ну посмотри дебуггером какой там fileSize перед вызовом malloc. Может и правда в переменной косяк какой-нибудь(например, слишком большое число - 4 млрд. - он же не выделит тебе всю память 32-разрядной шины адреса).
0
BeginerInt
0 / 0 / 0
Регистрация: 08.02.2017
Сообщений: 26
27.02.2017, 21:05  [ТС] 9
C++
1
string new_path = papka + "(двойной обратный слэш)" + FindData.cFileName;
это же папки .
0
nd2
2835 / 2403 / 1057
Регистрация: 29.01.2016
Сообщений: 8,046
27.02.2017, 21:07 10
Цитата Сообщение от BeginerInt Посмотреть сообщение
if(fileSize > 0)
Неверная проверка того, что возвращает GetFileSize().
0
BeginerInt
0 / 0 / 0
Регистрация: 08.02.2017
Сообщений: 26
27.02.2017, 21:08  [ТС] 11
GetFileSize() возвращает хандле файла.
0
DemolitionMan
129 / 155 / 87
Регистрация: 06.04.2016
Сообщений: 992
27.02.2017, 21:10 12
Цитата Сообщение от BeginerInt Посмотреть сообщение
poisk("D:");
вот здесь случайно не надо вот так писать?
D:\\
И еще выведи побольше информации о файле, который находит твоя программа - как минимум имя. Сдается мне, что она не находит никакого файла(из-за ошибки) и поэтому работает с косяком. Проработай получше функции поиска файла, чтобы они по-нормальному находили какой-нибудь реальный файл.
0
BeginerInt
0 / 0 / 0
Регистрация: 08.02.2017
Сообщений: 26
27.02.2017, 21:11  [ТС] 13
Цитата Сообщение от DemolitionMan Посмотреть сообщение
а если мерять теми строками что пронумеровались здесь?
Если мерять строками ,которые здесь : 48 строка.

Добавлено через 1 минуту
Цитата Сообщение от DemolitionMan Посмотреть сообщение
вот здесь случайно не надо вот так писать?
D:\\
И еще выведи побольше информации о файле, который находит твоя программа - как минимум имя. Сдается мне, что она не находит никакого файла(из-за ошибки) и поэтому работает с косяком. Проработай получше функции поиска файла, чтобы они по-нормальному находили какой-нибудь реальный файл.
хорошо,буду штрудировать)
0
nd2
2835 / 2403 / 1057
Регистрация: 29.01.2016
Сообщений: 8,046
27.02.2017, 21:17 14
Цитата Сообщение от BeginerInt Посмотреть сообщение
GetFileSize() возвращает хандле файла.
С чего бы это?
https://msdn.microsoft.com/ru-ru/lib...(v=vs.85).aspx
http://www.vsokovikov.narod.ru/New_M...etfilesize.htm
0
DemolitionMan
129 / 155 / 87
Регистрация: 06.04.2016
Сообщений: 992
28.02.2017, 08:38 15
Лучший ответ Сообщение было отмечено BeginerInt как решение

Решение

Немножко не логично брать размер файла этой функцией, хотя и можно. Вы нашли первый файл по Вашему условию и все параметры найденного файла или папки содержатся в структуре WIN32_FIND_DATA FindData;
Вот описание ее из C++Builder 6.
C++
1
2
3
4
5
6
7
8
9
10
11
12
typedef struct _WIN32_FIND_DATA { //wfd  
    DWORD dwFileAttributes; 
    FILETIME ftCreationTime; 
    FILETIME ftLastAccessTime; 
    FILETIME ftLastWriteTime; 
    DWORD    nFileSizeHigh; 
    DWORD    nFileSizeLow; 
    DWORD    dwReserved0; 
    DWORD    dwReserved1; 
    TCHAR    cFileName[ MAX_PATH ]; 
    TCHAR    cAlternateFileName[ 14 ]; 
}WIN32_FIND_DATA;
Как видно размер файла здесь задается 2-мя переменными по 32-бита: это nFileSizeHigh и nFileSizeLow;
Попробуйте поэкспериментировать с ними, хотя у Вас уже сделано определение размера, ну ладно тогда, можно не делать.(Это так для информации)

Добавлено через 2 минуты
Цитата Сообщение от BeginerInt Посмотреть сообщение
if (strcmp(FindData.cFileName, ".") *&& strcmp(FindData.cFileName, "..") != 0)
- у Вас что-то не так с этой строкой. Подумайте что Вы хотите здесь получить(и нам напишите тоже) и перепрограммируйте это.

Добавлено через 24 минуты
Никак не пойму зачем Вы сравниваете результат работы функции FindFirstFile()(это cFileName) с 1-й и с 2-мя точками. Эта функция не возвращает этих значений. Она возвращает имя файла или папки. Может в этом косяк?

Добавлено через 18 минут
Ну косяк не в ife короче, но все-равно там логика не правильная. С размером где-то косяк. Попробуйте считать размер из структуры WIN32_FIND_DATA:
FindData.nFileSizeHigh и
FindData.nFileSizeLow.

Добавлено через 2 часа 55 минут
Ну да, GetFileSize() себя очень плохо показала: выдает ошибку 6(неверный дескриптор) и генерирует исключение: нарушение доступа. Используйте чтение размера файла из структуры WIN32_FIND_DATA:
FindData.nFileSizeHigh и
FindData.nFileSizeLow.
Читает правильно - проверено!
1
28.02.2017, 08:38
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.02.2017, 08:38

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

Ошибка [BCC32 Error] E2453 Size of the type 'int[]' is unknown or zero
Функция: int multiplication(int double_matrix1,int double_matrix2, int m,...

Error in `./o': free(): invalid pointer
Здравствуйте Форумчане, я столкнулся с проблемой при создании проекта (если...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru