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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> С: указатели, Помогите плз найти ошибку 
:(
    Опции темы
tmp02
Дата 24.11.2008, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Товарищи, у меня есть проблема с использованием указателей. Код:

Код
// ...
int **ret = new int*;
int count = get_nonocup(ret);
// ...

// для простоты предположим что код get_nonocup такой:
int get_nonocup(int **arr) {

int count = 0;

for (int i=0; i<30; i++) {
    arr[i] = new int;
    *arr[count++] = i;
}

return count;

}


В результате в ret я получаю эелементы: 3430864, 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;

Я ожидал встретить первым элементом: 0. В каком месте кода ошибка??


M
bsa
Не забывай пользоваться кнопкой "Код"


Это сообщение отредактировал(а) bsa - 24.11.2008, 16:48
PM MAIL   Вверх
bsa
Дата 24.11.2008, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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



Ты сколько элементов выделил операцией new int*? А ведь пытаешься записать аж целых 30

Думаю, тебе нужно это:
Код
int **ret = new int*[30];
//...
int count = 0;
for(int i = 0; i < 30; ++i, ++count) {
   arr[i] = new int;
   *arr[i] = i;
}
Только в конце не забудь освободить память:
Код
for(int i = 0; i < 30; ++i)
   delete ret[i];
delete []ret;
А может стоит воспользоваться вектором?
Код
std::vector<int> get_nonocup() {
   std::vector<int> res;
   for (int i=0; i<30; i++) {
      res.push_back(i);
   }
   return res;
}

PM   Вверх
586
Дата 24.11.2008, 16:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Код
// ...
int *ret = 0;
int count = get_nonocup(&ret);
// ...

// для простоты предположим что код get_nonocup такой:
int get_nonocup(int **arr) 
{
    int count = 30;
    *arr = new int[count];

    for (int i=0; i<count; i++) {
        (*arr)[i] = i;
    }

    return count;
}

PM   Вверх
bsa
Дата 24.11.2008, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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



586, ты хоть проверял на компилируемость? (*arr)[i] у тебя не скомпилируется.
PM   Вверх
586
Дата 24.11.2008, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(bsa @  24.11.2008,  17:05 Найти цитируемый пост)
ты хоть проверял на компилируемость?

Да: http://codepad.org/GZv566hr

* исправил printf на cout, т.к. программа на C++, и используются операторы new/delete.


Это сообщение отредактировал(а) 586 - 24.11.2008, 17:34
PM   Вверх
bsa
Дата 24.11.2008, 17:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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



586, сорри. тормознул. почему-то решил, что у тебя arr определен как int *arr  smile 
PM   Вверх
tmp02
Дата 24.11.2008, 18:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



А можно ли как-нибудь сделать так, чтобы память выделялась по одному элементу внутри цикла в функции get_nonocup? Дело в том, что у меня заранее количество элементов не известно.
PM MAIL   Вверх
tmp02
Дата 24.11.2008, 19:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



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

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

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

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

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


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

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


 




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


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

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