Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
gvozdik
4 / 4 / 2
Регистрация: 09.12.2014
Сообщений: 38
1

Чтение бинарного файла с 16-ричными числами в массив - предоставление и очищение памяти

15.12.2014, 09:43. Просмотров 987. Ответов 4
Метки нет (Все метки)

Программа вылетает, переполнение стека..
Имеется бинарный файл с 16-ричными числами, по 40 штук в строке вида "4d" через пробел. Пытаюсь их считать в массив, каждый элемент которого будет содержать числа одной строки. Строк в файле, например, 26.

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
#include "stdafx.h"
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
#include <cmath>
#include <fstream>
#include <iostream>
 
using namespace std;
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    
                uint8_t *mass[26];
                FILE* fp=fopen ("Z.bit", "rb");
            for (int i=0; i<26; i++){
             memset(mass[i],0, 40);
             mass[i] = new uint8_t[40];
             fread(mass[i], 1,40, fp);
 
             //printf("%x\n", mass[i][0]);
             }
    
    
    system ("pause");
    return 0;
}
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.12.2014, 09:43
Ответы с готовыми решениями:

Чтение структуры из бинарного файла в массив
Структура выглядит так: struct StandardBook { char ISBN; //регистрационный номер книги...

Чтение данных из бинарного файла в массив
Доброго всем времени суток. Мне нужно было прочитать из бинарного файла данные в массив int...

Массив бинарного файла, чтение и конвертация.
3 день бьюсь ничего не выходит. Гуру помогите. Есть бинарный файл, каждая строка содержит 37 байт,...

Очищение памяти (одномерный динамический массив)
Здравствуйте, у меня возникла проблема с высвобождением памяти при одномерном динамическом массиве:...

Чтение в массив файла с отрицательными и дробными числами
Вопрос следующего характера: имеется файл вида: 0 -0.500000000000059 0.001 ...

4
Kerry_Jr
Эксперт PHP
2245 / 2034 / 948
Регистрация: 14.05.2014
Сообщений: 5,952
Записей в блоге: 1
Завершенные тесты: 5
15.12.2014, 09:53 2
Цитата Сообщение от gvozdik Посмотреть сообщение
C++
1
2
memset(mass[i],0, 40);
mass[i] = new uint8_t[40];
сначала заполняете, а потом память выделяете? Попробуйте строки местами поменять. И не забывайте динамически выделенную память освобождать.
1
gvozdik
4 / 4 / 2
Регистрация: 09.12.2014
Сообщений: 38
15.12.2014, 09:59  [ТС] 3
спасибо большое за ответ. создав тему, сразу бросились в глаза переставленные строки и исправила. перестановка их помогла. ищу, как тут удалить тему.. не подскажете?
и про память можно динамическую тоже рассказать)
как очищать

и еще такая проблема.. строк в файле куда больше чем 26... а именно uint8_t *mass[262144]; мне надо.. но при такой цифре вновь вылетает прога. может дело как раз в освобождении памяти, не подскажете?
0
Kerry_Jr
Эксперт PHP
2245 / 2034 / 948
Регистрация: 14.05.2014
Сообщений: 5,952
Записей в блоге: 1
Завершенные тесты: 5
15.12.2014, 10:14 4
Лучший ответ Сообщение было отмечено gvozdik как решение

Решение

Цитата Сообщение от gvozdik Посмотреть сообщение
как очищать
если используете оператор new (new[]), всегда используйте его в связке с delete(delete[]). Т.е. выделили нужный кусок памяти, например,
C++
1
char* str = new char[20];
Попользовались им, после этого
C++
1
delete[] str;
Если в цикле выделили несколько кусков памяти, например,
C++
1
2
3
uint8_t *mass[26];
for (int i = 0; i < 26; ++i)
    mass[i] = new uint8_t[40];
то и удалять нужно в цикле
C++
1
2
for (int i = 0; i < 26; ++i)
    delete[] mass[i];
Про динамическое выделение и последующее освобождение памяти лучше почитать в каком-нибудь источнике, т.к. тема довольно-таки обширная.

Добавлено через 2 минуты
Цитата Сообщение от gvozdik Посмотреть сообщение
uint8_t *mass[262144];
А зачем Вам такой большой массив сразу. Может проще будет сделать обработку каждой строки в цикле?
1
gvozdik
4 / 4 / 2
Регистрация: 09.12.2014
Сообщений: 38
15.12.2014, 10:24  [ТС] 5
обработка по строкам не спасет. мне надо хранить часть каждой строки. понизила свою нужду до 65536 и не вылетает!
Спасибо Вам большое за ответы!
0
15.12.2014, 10:24
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.12.2014, 10:24

Работа с 16-ричными числами
Написать программу, которая вводит с клавиатуры натуральное число N, выполняет сдвиг N вправо на 3...

Чтение бинарного файла - чтение первых 9 байт
Есть код, который читает первые 9 байт бинарного файла(заголовок записи) void...

Перегрузка операций над 16-ричными числами
Базовый класс «Шестнадцатеричное число»: - конструкторы (по умолчанию, инициализация...


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

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

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