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

Поиск:

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


Новичок



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

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



Всем привет, помогите плиз разобраться вот с чем. Вот код:

Код

int** mass;

void initialise()
{
    mass = new int*[];
    for (size_t i = 0; i < 10; i++)
    {
        mass[i] = new int(i);
    }
}

int*& getelem(int i)
{
    int* t = mass[i];
    return t;
}

int main(array<System::String ^> ^args)
{
    initialise();

    int* t = getelem(0);
    int* q = new int(5);

    getelem(0) = q;


    Console::ReadLine();
    return 0;
}


В нем я создаю массив типа int**. Затем я пытаюсь получить ссылку на первый элемент массива и изменить его.Но ничего не выходит.
Если писать просто что-то типа

Код

int i=5;
int* q=&i;
int*& q2=q;

q2=new int(10);




то таким образом я меняю указатель q, чем это отличается от случая с массивом мне пока не ясно.
PM MAIL   Вверх
Чупакабро
Дата 5.7.2014, 10:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(Vadimka1234 @  5.7.2014,  10:07 Найти цитируемый пост)
mass = new int*[];

Может в квадратных скобках стоит указать количество элементов?

Цитата(Vadimka1234 @  5.7.2014,  10:07 Найти цитируемый пост)
int*& getelem(int i)

Возвращать ссылку на локальную переменную? Может я плохо учился в школе, но мне кажется, что лучше так:
int* getelem(int i)


Это сообщение отредактировал(а) Чупакабро - 5.7.2014, 10:59
--------------------
Project Project1.exe raised exception class EAccessViolation with message 'Access violation at address 00459B8B in module 'Project1.exe'. Read of address 0000019C'. Process stopped. Use Step or Run to continue.
PM MAIL   Вверх
Vadimka1234
Дата 5.7.2014, 13:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата

Возвращать ссылку на локальную переменную? Может я плохо учился в школе, но мне кажется, что лучше так:
int* getelem(int i)


нет так нельзя потому что в таком случае нельзя будет писать 
getelem(0)=new int так как выражение не будет l-value; Поэтому-то я и указывая тип возвращаяемого значения как int*&. А вернув int* вы получите просто новый указатель который ссылается туда же куда и mass[0],
а , нужна именно ссылка на этот указатель. Тогда значение в массиве можно будет поменять через новый указатель.


Цитата

Может в квадратных скобках стоит указать количество элементов?


насчет этого, мне кажется это не очень принципиально для данного вопроса.



PM MAIL   Вверх
volatile
Дата 5.7.2014, 13:29 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Vadimka1234, что вы хотите получить в итоге?
В вашем коде ошибки чуть ли не вв каждой строке
И понять что вы хотели, трудно.
Зачем например, вы выделяете каждый инт отдельным new?

в общем чтоб получить нормальный ответ, нужно задать нормальный вопрос.
PM MAIL   Вверх
Vadimka1234
Дата 5.7.2014, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Хочу я  следующее: получить массив скажем из десяти целочисленных указателей. Затем написать функцию которая бы принимала индекс и возвращала соответсвующий элемент массива назовем его например q. 

После этого когда я в программе буду писать например q=new int(5), должен меняться соответсвующий элемент массива. 

То есть, есть маиссив int** mas. Получаю к примеру первый элемент int* q=getelemAt(0). После этого пишу q=new int(5). В результате первый элемент массива должен изменится тоже.

Надеюсь объяснил понятно)




PM MAIL   Вверх
volatile
Дата 5.7.2014, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Vadimka1234 @  5.7.2014,  10:07 Найти цитируемый пост)
Хочу я  следующее: получить массив скажем из десяти целочисленных указателей. 

int ** mass = new int*[10];

Цитата(Vadimka1234 @  5.7.2014,  13:43 Найти цитируемый пост)
 Затем написать функцию которая бы принимала индекс и возвращала соответсвующий элемент массива назовем его например q. 


Цитата(Vadimka1234 @  5.7.2014,  10:07 Найти цитируемый пост)
int*& getelem(int i)
{
    int* t = mass[i];
    return t;

    return mass[i];
}


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

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


PM MAIL   Вверх
Vadimka1234
Дата 5.7.2014, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Я так пробовал, но чето не получается. Элемент в массиве по прежнему указывает на прежний адресс
PM MAIL   Вверх
volatile
Дата 5.7.2014, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Vadimka1234 @  5.7.2014,  14:53 Найти цитируемый пост)
Я так пробовал,

код в студию

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

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

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

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

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


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

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


 




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


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

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