Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ошибка записи в память при работе с указателями 
V
    Опции темы
wester
Дата 5.8.2010, 12:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 675
Регистрация: 27.2.2009

Репутация: нет
Всего: 13



Всем доброго времени суток! пытаюсь пересесть с C# на С++, но пока не очень получается
вот исходники

program.cpp
Код


#include <locale.h>
#include<iostream>
#include "Core.h"


int main()
{
    using namespace std;
    setlocale(LC_ALL,"");

    Core *core = new Core();
    int NS=0,NW=0,NL=0;

    
    wcout<<L"Введите колличество строк (NL): ";
    cin>>NL;
core->SetNL(NL); // исключение
    wcout<<L"Введите  максимальную длину слова (NW) : ";
    cin>>NW;
    core->SetNW(NW);
    wcout<<L"Введите длину строки (NS) : ";
    cin>>NS;
    core->SetNS(NS);
    cout<<core->VerifyParam();
    cin.ignore().get();
    
    return EXIT_SUCCESS;
}


core.h
Код

class Core
{
public:
    Core();
    bool VerifyParam(); // получение параметров
    void ToVec(char*); // занесение слов в vector со сплитом символа пробела    
    void SetNL(int); // получение значения NL
    void SetNW(int); // получение значения NW
    void SetNS(int); // получение значения NS
    ~Core();
private:
    int *NL; // число строк
    int *NS; // длина строки (не более)
    int *NW; // длина слова (не более)
};

core.cpp
Код

#include "Core.h"



Core::Core()
{
    int *NS = new int;
    int *NL = new int;
    int *NW = new int;

}

Core::~Core()
{
    delete NW; 
    delete NL; 
    delete NS; 

}

bool Core::VerifyParam()
{
    if((*NL!=0) && (*NS!=0) && (*NW!=0))
    {
        return true;
    }
    
    return false;
}

void Core::SetNL( int pNL ) // исключение
{
    *NL = pNL;    
}

void Core::SetNS(int pNS)
{    
    *NS=pNS;
}

void Core::SetNW(int pNW)
{    
    *NW=pNW;
}


и вот на 17 строке у меня выбрасывается исключение http://s005.radikal.ru/i212/1008/eb/5ec36c9fea72.png
как поправить это дело ?
PM MAIL   Вверх
djamshud
Дата 5.8.2010, 12:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 4
Всего: 39



int *NL = new int; - это локальный указатель. нужно сделать так:
this->NL=new int;


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
wester
Дата 5.8.2010, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 675
Регистрация: 27.2.2009

Репутация: нет
Всего: 13



djamshud, 
Cпасибо!

PM MAIL   Вверх
djamshud
Дата 5.8.2010, 12:26 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 4
Всего: 39



wester, не за что. Вот только нужны ли вам там вообще указатели? Можно просто использовть int.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
Dem_max
Дата 5.8.2010, 16:20 (ссылка) |    (голосов:4) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: 4
Всего: 39



Код

    int *NS = new int;
    int *NL = new int;
    int *NW = new int;

это конечно жесть


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
wester
Дата 6.8.2010, 09:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 675
Регистрация: 27.2.2009

Репутация: нет
Всего: 13



Dem_max, 
гм, в чем ?
или нужно выделять память непосредственно в вызывающих методах ? ( например SetNS(int pNS) {int *NS = new int;} )
PM MAIL   Вверх
mrbrooks
Дата 6.8.2010, 09:48 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 19
Всего: 306



Цитата(wester @  6.8.2010,  10:34 Найти цитируемый пост)
или нужно выделять память непосредственно в вызывающих методах ? 

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


Цитата(wester @  6.8.2010,  10:34 Найти цитируемый пост)
гм, в чем ?

жесть в том, что в данном случае зачем использовать указатели? почему не достаточно простых переменных?
смотрится несколько диковато  smile 
надо учесть тот факт - C# - это не С++. И многие подходы из С# в С++ смотрятся избыточными.
PM MAIL   Вверх
wester
Дата 6.8.2010, 09:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 675
Регистрация: 27.2.2009

Репутация: нет
Всего: 13



mrbrooks, 
просто думал , что более лучшая работа с памятью.
или в данном случае можно этим пренебречь ?
PM MAIL   Вверх
boostcoder
Дата 6.8.2010, 09:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 20
Всего: 110



Цитата(wester @  5.8.2010,  12:18 Найти цитируемый пост)
    int *NS = new int;
    int *NL = new int;
    int *NW = new int;

вы случайно на жабе раньше не писали? smile 
PM WWW   Вверх
mrbrooks
Дата 6.8.2010, 10:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 19
Всего: 306



Цитата(wester @  6.8.2010,  10:52 Найти цитируемый пост)
или в данном случае можно этим пренебречь ? 

если не работаешь к примеру с массивом int, то да. особого эффекта не получишь.

Цитата(boostcoder @  6.8.2010,  10:54 Найти цитируемый пост)
вы случайно на жабе раньше не писали? 

С#
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0523 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.