Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.08.2011, 21:05   #1
Mitrik
Новичок
Джуниор
 
Регистрация: 10.08.2011
Сообщений: 2
Печаль Проблема с std::bad_alloc

Господа форумчане!
Я в среде С++ недавно,но тем не менее пытаюсь написать программу для статистического анализа.
На данный момент есть кусок кода для чтения файла с данными, которые располагаются так: "12\31\2010 Evening Pick 3 1-9-1"
Все бы не плохо, только вот при выполнении куска кода выпадает ошибка std::bad_alloc. (при чтении стори этак 168й в файле)
Хотелось бы узнать что это, и с чем его едят?

Вот код:

// Lottery.cpp: определяет точку входа для консольного приложения.

#include "stdafx.h"
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
return 0;
}

enum ConsoleColor
{
Black = 0,
Blue = 1,
Green = 2,
Cyan = 3,
Red = 4,
Magenta = 5,
Brown = 6,
LightGray = 7,
DarkGray = 8,
LightBlue = 9,
LightGreen = 10,
LightCyan = 11,
LightRed = 12,
LightMagenta = 13,
Yellow = 14,
White = 15
};

void SetColor(ConsoleColor text, ConsoleColor background)
{
HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hStdOut, (WORD)((background << 4) | text));
}

void ERR()
{
SetColor(LightRed,Black);
cout<<"Oops! There is an error somewhere. Please try again."<<"\n";
cout<<"---------------------------------------------------"<<"\n\n\n\a";
SetColor(LightGreen,Black);
}

void SUCS()
{
cout<<"Your data were successfully processed."<<"\n\n\n";
}

void main()
{
SetColor(LightGreen,Black);
std::cout<<"Greetings! You're using program 'MoneyMaker' v.0.75!"<<"\n\n\a";
FILE *Infl; char *Path=new char[255];
_strt:std::cout<<"Insert path to the data file please:"<<"\n";
SetColor(LightCyan,Black); std::cin.get(Path,255); SetColor(LightGreen,Black); Infl=fopen(Path,"r");
if (Infl==NULL) {SetColor(LightRed,Black);perror ("Error opening file");SetColor(LightGreen,Black);s td::cin.get();goto _strt;}
cout<<"File ";SetColor(LightCyan,Black);cout<<P ath;SetColor(LightGreen,Black);cout <<" was successfully opened. Plese wait while programm will process your data."<<"\n"; delete[] Path;
//Просматриваем файл и считаем сколько разных розыгрешей там было, соответсвенно после делаем массив(х) для каждого розыгрыша.
//Паралельно считаем ширину массива и длинну.
//int *Dt_d=new int,*Dt_m=new int,*Dt_y=new int;
string Name("\0",19);char *char1=new char,*char2=new char,*Str=new char[100];char1=NULL;char2=NULL;
struct
{
string names[50];
int width[50],height[50];
}P;
int *i=new int,Point=0,temp=0;*i=0;
while(!(feof(Infl)))//читать как строку
{
fgets(Str,80,Infl);//getting string
while(!(*Str==' '))//going thru dates
{
Str++;
}
while(*Str==' ')//going thru spaces
{
Str++;
}
char1=NULL;char2=NULL;Name=" ";
do//Name's being reading.
{
char1=Str;Str++;char2=Str;
if(!((*char1==' ' && *char2==' ')||(Name.length()==19)))Name=Name+ *char1+*char2;else break;Str++;
}while(!(*char1==' ' && *char2==' '));
while(*Str==' ')//going thru spaces
{
Str++;
}
temp=0;*i=0;
do //Number's turn;
{
temp++;
do Str++; while(!((*Str=='-')||(*Str==' ')||(*Str=='[')));
}while(*Str=='-');
for(int k=0;k<Point;k++)//searsching for right place, if no - creating one.
{
if(Name==P.names[k]){if(P.width[k]==0)P.width[k]=temp;P.height[k]++;goto _mid;}
}
P.names[Point]=Name;P.height[Point]=1;P.width[Point]=temp;Point++;
_mid:std::cout<<".";
if(feof(Infl))break;
}
cout<<"\nData was successfully readed.\n";
rewind(Infl);


_getch();
}


Идея: читаем строку из файла,пропускаем дату и пробелы до названия(Evening Pick 3) - пишем его в Name, далее пропускаем пробелы и читаем количество чисел(9-3-6)по прочеркам(-),сравниваем Name с уже записанными именами и если находим - длинна++, если нет - пишем в новую ячейку на которую тыкает Point.Вотъ...
Компилятор - Microsoft Visual C++ Express 2010.
Функции : _tmain - понятия не имею зачем она там, но она родная
SetColor - задание цвета текста и фона экрана найденное где-то в инете.
ERR и SUCS ! просто выводят сообщение.
Переменные : *Path - путь к файлу
*Infl - собственно указатель на файл.
Name - имя которое будет сравниться с уже имеющимисью
*char1 *char2 - чары для проверки конца чтения(двойной пробел, и т.д.)
*Str - строка из файла. а точнее указатель на нее.
struct
{
string names[50];
int width[50],height[50];
}P; - уже имеюшиесь записи игр и ширины и длинны матриц нужных для них.
Point - показывает которая ячейка свободна для записи в P.names
Mitrik вне форума Ответить с цитированием
Старый 10.08.2011, 21:06   #2
Mitrik
Новичок
Джуниор
 
Регистрация: 10.08.2011
Сообщений: 2
По умолчанию

Вот что по этому поводу пишет с++:
http://www.cplusplus.com/reference/std/new/bad_alloc/
Mitrik вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
E2015 Ambiguity between 'std::log(double)' and 'std::log(long double)' Namolem Помощь студентам 3 02.04.2011 20:22
ошибка: no match for ‘operator<<’ in ‘std::operator<< [with _Traits = std::char_traits<char> Critter Общие вопросы C/C++ 5 08.08.2010 23:38
(C++) bad_alloc (подавление/обход) Troi666 Помощь студентам 6 13.08.2009 21:58
проблема с std::ifstream.eof() alex8 Общие вопросы C/C++ 5 05.05.2009 18:24
С++|bad_alloc|Заполнение оперативной памяти Troi666 Помощь студентам 0 30.04.2009 00:15