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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не работает функция 
:(
    Опции темы
Нео
Дата 27.7.2006, 17:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Не пойму, в чем сожет быть проблема. Программирую под с++ .NET
Когда попробовал перекомпилировать под досовский djgpp, все пошло нормально.
Но меня не устраивает работать под дос, к тому же привык к майкрософту.
Вот собственно в чем проблема:

функция класса Element: 
void Element::putin(int n,double d)
{
    *In[n]=d;
}
In объявлено в классе как double **In, т.е. это массив указателей на double.

В другой функции, которая вызывается до предыдущей:
void Element::create()
{
    .........
    In=(double **)malloc(sizeof(double *)*NInSignal);
    .........
    for(i=0;i<NInSignal;i++)
    {
        .........
        d=new double;
        In[i]=d;
    }
}
Т.е. здесь происходит инициализация. NInSignal=2 в моем случае.
Теперь вызываю ф-ю putin(0,какое-то число), все нормально, а если передать в функцию n=1, то при выполнении строки *In[n]=d; переменная *In[n] по прежнему остается=0, хотя d - ненулевое число.
Т.е. проблема в том, что в эту переменную не заносятся значения при n!=0. 
PM MAIL   Вверх
Plamenk
Дата 27.7.2006, 17:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



А на что ругается? 
PM MAIL   Вверх
Нео
Дата 27.7.2006, 17:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Да ни на что не ругается!

В том и проблема, что вроде все логически верно, а переменной не присваивается значение! 
PM MAIL   Вверх
Rockie
Дата 27.7.2006, 18:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 8
Всего: 31



первое что не нравится это
Цитата(Нео @  27.7.2006,  17:09 Найти цитируемый пост)
d=new double;
        In[i]=d;

непонятно, что ты здесь делаешь. вероятно ты неправильно выделяешь память. если используешь new, то используй new. память под двумерный массив можно выделить например так:
Код
mas = new int * [rows];
for(int i = 0; i < rows; i++)
  mas[i] = new int[cols];


и стоит не забывать в конце освободить память:
Код
for (int i = 0; i < rows; i++)
  delete[] mas[i];
delete [] mas;
 


--------------------
Чтобы иметь большой гардероб - надо иметь большой гардероб.
PM   Вверх
Нео
Дата 27.7.2006, 19:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Может, я действительно что-то не так делал, стоило по-другому организовать?
У меня In - массив указателей, объявлен как double **In.
Я сначала выделял память для массива, Т.е. In[k] - k-й элемент-указатель массива.
Теми двумя строками я выделял память под вещественную переменную и ее адрес засовывал в массив.
И все это дело проделал в цикле.

Добавлено @ 19:24 
Проделал операцию по замене malloc на new, как мне посоветовал Rockie. Результат тот же самый. smile 
PM MAIL   Вверх
Нео
Дата 27.7.2006, 19:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Проблема решилась сама собой, просто решил попробовать вывести значения переменной на экран, в результате все оказалось правильно. Как я понял, дело в отладчике. Я пользовался стандартным QuickWatch'ем. Как вижу, придется отбросить этот вариант. Как еще просматривать значения во время отладки? И еще, можно ли ускорить запуск программы с отладкой? 
PM MAIL   Вверх
ptr
Дата 28.7.2006, 05:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 661
Регистрация: 31.5.2006
Где: Новосибирск

Репутация: 1
Всего: 14



Цитата(Нео @  27.7.2006,  23:39 Найти цитируемый пост)
И еще, можно ли ускорить запуск программы с отладкой?  

В каком смысле?

Цитата(Нео @  27.7.2006,  23:39 Найти цитируемый пост)
Как я понял, дело в отладчике.

Или в неумении им пользоваться smile . 


--------------------
Единственный способ определить границы возможного - это выйти за эти границы, в невозможное.
Артур Кларк.
PM MAIL ICQ   Вверх
Нео
Дата 28.7.2006, 12:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Поэтому я и спрашиваю, как еще можно просмотреть значения, т.к. еще не разобрался в отладчике, но остается факт, что QuickWatch  неправильно работает, и причина в отладчике, а не во мне.
А насчет ускорения запуска - если запустить программу с отладкой, компьютер перед запуском секунд 5 ничего не делает, просто запускается консольное окно. 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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