0 / 0 / 0
Регистрация: 17.04.2008
Сообщений: 12
|
||||||
1 | ||||||
Ошибка выделения памяти...17.04.2008, 09:54. Показов 3865. Ответов 19
Метки нет (Все метки)
Когда я пытаюсь выделить память двумерному динамическому массиву, возникает ошибка "Microsoft C++ exception: std::bad_alloc at memory location...". Вобщем суть того что я делал: Мне нужно считать 2 текстовых файла в кодировке ANCI, построчно их сравнить, ну и сделать ещё ряд действий, до которых я ещё не дошёл... Вобщем я создаю класс, который должен заниматься считыванием и разбиением. В нём есть 2 динамических массива символов (char). В первый массив записывается информация из файла, во второй (он 2 мерный) построчно переписывается текст из первого массива (в идеале). Под 1 массив память выделяется нормально, под второй, почемуто не может. Посмотрите, пожалуйста, код и скажите, где косяк:
0
|
17.04.2008, 09:54 | |
Ответы с готовыми решениями:
19
Ошибка выделения памяти Ошибка выделения памяти Ошибка выделения памяти Ошибка выделения памяти(?) |
0 / 0 / 0
Регистрация: 17.04.2008
Сообщений: 12
|
||||||
17.04.2008, 10:07 [ТС] | 2 | |||||
ЗыЗы: Сорри... Небольшая поправка:
0
|
Супер-модератор
8783 / 2536 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
|
|
17.04.2008, 10:11 | 3 |
а количество строк у тебя значение, отличное от нуля ... ты прогу трассерни и глянь, что функция подсчета строк возвращает...
0
|
0 / 0 / 0
Регистрация: 17.04.2008
Сообщений: 12
|
|
17.04.2008, 10:22 [ТС] | 4 |
0
|
Супер-модератор
8783 / 2536 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
|
|
17.04.2008, 10:26 | 5 |
так правильно, ты выделяешь неправильно, тебе надо выделить сначала колво твоих строк, ну а потом в цикле каждой из них выделить еще памяти, у тебя сейчас объявляется только кол-ко строк в массиве, но сами строки без памяти... у тебя же указатель на массив строк...
0
|
0 / 0 / 0
Регистрация: 17.04.2008
Сообщений: 12
|
||||||
17.04.2008, 10:32 [ТС] | 6 | |||||
Ты имеешь в виду сделать
0
|
Супер-модератор
8783 / 2536 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
|
|
17.04.2008, 10:37 | 7 |
это должно выглядеть примерно так:
Код
Razb_Text = (char**)[COLOR=#0000ff]malloc([/COLOR][SIZE=2]Strok); - это кол-во строк[/SIZE] for(int i=0; i < Strok; i++) Rasb_Text = newchar[256]; - это память для каждой строки
0
|
0 / 0 / 0
Регистрация: 17.04.2008
Сообщений: 12
|
|
17.04.2008, 10:47 [ТС] | 8 |
Ваззап Мега Спс! Я просто не знал про "malloc". Ламер я пока ещё
0
|
Супер-модератор
8783 / 2536 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
|
|
17.04.2008, 10:50 | 9 |
ну как говорится, век живи - век учись...
0
|
0 / 0 / 0
Регистрация: 17.04.2008
Сообщений: 12
|
|
17.04.2008, 10:53 [ТС] | 10 |
Гы Тока он теперь на
Код
for(int i=0; i < Strok; i++) Rasb_Text = newchar[256];
0
|
Супер-модератор
8783 / 2536 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
|
|
17.04.2008, 11:03 | 11 |
упс, пардон... я виноват... там надо писать Rasb_Text[i] = newchar[256];
а вообще корректней будет писать выделение маллоком... т.е. под размер конкретной строки...
0
|
0 / 0 / 0
Регистрация: 17.04.2008
Сообщений: 12
|
|||||||||||
17.04.2008, 11:32 [ТС] | 12 | ||||||||||
Хм... Ещё 1 проблема вылезла malloc память криво выделяет. Строка
0
|
Супер-модератор
8783 / 2536 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
|
|
17.04.2008, 11:48 | 13 |
Razb_Text = (char**) malloc (Strok*256);
Access violation writing location 0x00000000 - это исключительная ситуация, обозначающая обращение к неинициализированной памяти... вот проверил, пример работы с такими строками: Код
int main() { int cnt = 0; std::cin >> cnt; char** text = (char**) malloc(cnt*256); for(int i = 0; i < cnt; i++){ text[i] = (char*) malloc(cnt*256); std::cin >> text[i]; } for(int i = 0; i < cnt; i++){ std::cout<< i << ": "<< text[i]<<"\n"; } }
0
|
0 / 0 / 0
Регистрация: 17.04.2008
Сообщений: 12
|
|||||||||||
17.04.2008, 12:06 [ТС] | 14 | ||||||||||
Ок... Почти врубился (во всяком случае код не эррорит. Тока недогоняю... В mallic подаётся количество бит выделяемое под данную "переменную" ? или что? Просто строка:
0
|
Супер-модератор
8783 / 2536 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
|
|
17.04.2008, 12:24 | 15 |
я попорчен билдером, где написано куча классов, чтобы таких заманух не было...
выделяешь ты количество байт маллоком... а в хелпе написано, что null фунция возвращает либо при 0 размере, либо, когда не хватает памяти (честно сам не пойму, что бы это значило)
0
|
0 / 0 / 0
Регистрация: 17.04.2008
Сообщений: 12
|
|
17.04.2008, 12:40 [ТС] | 16 |
Гы Типа аперативки 2 метра, а ты выделяешь 3
0
|
Супер-модератор
8783 / 2536 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
|
|
17.04.2008, 12:44 | 17 |
ну сам понимаешь, что функция эта древняя, может в то время такие проблемы и были, хотя я не догоняю, отчего у тебя память просто на 256 байт возвращает NULL... а на чем ты пишешь прогу?
0
|
0 / 0 / 0
Регистрация: 17.04.2008
Сообщений: 12
|
|
17.04.2008, 12:48 [ТС] | 18 |
На MS Visual C++ 2005
0
|
Супер-модератор
8783 / 2536 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
|
|
17.04.2008, 12:56 | 19 |
слушай, а там же есть класс СString, чтобы не морочится с выделениями и прочей ерундой, связанной с массивом символов
0
|
0 / 0 / 0
Регистрация: 17.04.2008
Сообщений: 12
|
|
17.04.2008, 13:11 [ТС] | 20 |
Возможно и есть... Тока я язык пока знаю очень плохо и с этим классом ещё не сталкивался.
0
|
17.04.2008, 13:11 | |
17.04.2008, 13:11 | |
Помогаю со студенческими работами здесь
20
Ошибка выделения памяти Ошибка выделения динамической памяти Ошибка выделения памяти для двумерного массива Утечки памяти без выделения памяти? Динамическое выделения памяти Смысл выделения памяти Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |