Форум программистов, компьютерный форум CyberForum.ru

Краш на моменте vector.push_back() - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Перевод чисел из строки в массив чисел http://www.cyberforum.ru/cpp-beginners/thread1491843.html
Задача: Ввод: Во входном файле содержится несколько (до 1000) строк, в каждой строке задается одно целое число от 6 до 1000000. Конец списка чисел завершается строкой с числом 0. Вывод: В выходной файл вывести для каждого числа разложение в виде суммы трех простых чисел, как показано в примере. Если возможно несколько разложений, то вывести одно из них. Если разложения не существует, то...
C++ Вывод лишних символов в строке Добрый день! Мне нужно решить простую задачу на множественное наследование классов (код приведен ниже). Задачу я решил, наследование проходит успешно. Есть только одна проблема. Когда я вывожу на печать текст (строки №27 и №47), перед ним появляется огромное количество мусора, а именно символов "М". #include <stdio.h> #include "stdafx.h" #include <iostream> using namespace std;... http://www.cyberforum.ru/cpp-beginners/thread1491829.html
C++ Запуск второй программы и подстановка ключей в ней
Добрый День! Сразу скажу, что никакого отношения ко взлому не имеет данная тема. Имеются 2 простеньких программы: 1 - считывает из файла слова/пароли/символы, 2 - пустая программа с Hello Word, но для запуска нужно прописать тот так называемый пароль из 1-ой программы, если же совпадет. Думаю суть понятна, т.е первая программа вынимает из файла слова, и каким-то образом должна...
Проверить сбалансированность скобок в заданном тексте C++
Задан текст, в котором есть круглые скобки. Разработать программу, которая проверяет сбалансированность скобок в заданном тексте. Если скобки сбалансированы, то для каждой пары выводит их номера позиций в тексте по возрастанию номеров скобок, которые закрываются. Использовать стек.
C++ Не работает программа считывания последовательности из файла http://www.cyberforum.ru/cpp-beginners/thread1491811.html
Пытаюсь сделать программу, которая достает из текстового файла последовательности, и предлагает их решить. Если пользователь не правильно продляет последовательность, то прога предлагает исправить пять раз. Числа должны браться из текстового документа так: 3 123 4 5 43210 -1 Где: Первое число - длинна последовательности. Второе - последовательность третье - ответ.
C++ Отличие getline() от cin.getline() Чем отличается getline() от cin.getline() ? подробнее

Показать сообщение отдельно
Hunter13ua
46 / 46 / 5
Регистрация: 25.10.2011
Сообщений: 183
02.07.2015, 15:53     Краш на моменте vector.push_back()
Доброго времени суток.
Начну с короткого объяснения кода: программа считывает файл строчка за строчкой ( в строке ровно 1 слово и 1 число, записанные через пробел ), создаёт объект с этими данными и записывает указатель на этот объект в вектор.
Немного исследований мною:
1) Во время отладки программы, она работает безошибочно и проходит по всем моментам.
2) При изменении поля имени с name.c_str() на "Default Name" или вовсе использования конструктора по умолчанию - краш не наблюдается. Однако краш происходит именно в момент push_back, а не создания объекта.
3) Краш происходит только с определёнными данными, хотя их формат верен. ( строки входного файла пометил ).
Если кто сталкивался с такой проблемой, прошу откликнуться. Или если есть ошибка в коде, прошу указать.
main.cpp
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
#include <iostream>
#include <fstream>
#include <ctime>
#include <cstdlib>
#include <vector>
#include <Player.h>
using namespace std;
 
vector<Player*> getPlayersFromFile(const char* filename){
    ifstream file(filename);
    vector<Player*> players;
    string name; int elo;
    while (file >> name >> elo){
        Player* newPlayer = new Player(name.c_str(), elo);
        players.push_back(newPlayer);
    }   return players;
}
 
int main()
{
    srand(time(0));
    vector<Player*> players = getPlayersFromFile("Players.txt");
    for( vector<Player*>::iterator i = players.begin(); i != players.end(); i++ )
        cout << (*i)->getName() << ' ' << (*i)->getElo() << endl;
    return 0;
}

Player.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#ifndef PLAYER_H
#define PLAYER_H
 
class Player
{
    public:
        Player();
        Player(const char*,int);
        Player(const Player&) = delete;
        virtual ~Player();
        const char* getName();
        int getElo();
    protected:
    private:
        char *name;
        int elo;
};
 
#endif // PLAYER_H

Player.cpp
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
#include "Player.h"
#include <cstdlib>
#include <cstring>
#include <iostream>
 
Player::Player()
{
    name = NULL;
    elo = 1500;
}
 
Player::~Player()
{
    delete name;
}
 
Player::Player(const char *Name, int Elo)
{
    name = new char[strlen(Name)];
    strcpy(name, Name);
    elo = Elo;
}
 
const char* Player::getName()
{
    return name;
}
 
int Player::getElo()
{
    return elo;
}

Players.txt
Код
inhumanlol 1500
Leichenlager 1500
Hellzpawn 1500
Miithrandir 1500
Hunter13UA 1500
z3rglein 1500
Akml 1500
apzop 1500
Baphemot 1500 <--- crash
Crimsonsnake 1500
Drunkelion 1500
EggsTreme 1500
eksp0 1500
mohamd22 1500
Ownerr 1500 <--- crash
SwedishDuck 1500
ThTHrousThT 1500
Ultigod 1500 <--- crash
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 20:45. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru