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

Поиск:

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


Шустрый
*


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

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



подскажите почему в конструкторе MyClass(), память выделяется только для одного элемента, а не для 10?
Код

#include "stdafx.h"

class MyClass
{
    public:
        MyClass();
        ~MyClass();
    private:
        int *data;
};

int _tmain(int argc, _TCHAR* argv[])
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    
    MyClass a;
    
    cin.get();

    return 0;
}
//---------------------------------------------------------------
MyClass::MyClass()
{
    this->data = new int[10]; // почему-то выделяется только для одного элемента?
    
    for(short i = 0; i < 10; i++)
        data[i] = i;
    
    cout << "Вызван MyClass();" << endl;
}
//---------------------------------------------------------------
MyClass::~MyClass()
{
    delete []data;
    cout << "Вызван ~MyClass();" << endl;
}


PM MAIL   Вверх
azesmcar
Дата 6.11.2010, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

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



Цитата(Vovan222 @  6.11.2010,  12:24 Найти цитируемый пост)
подскажите почему в конструкторе MyClass(), память выделяется только для одного элемента, а не для 10?

как ты это понял?
PM   Вверх
Bugmaker
Дата 6.11.2010, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



А разве нужно не 
int* data=new int[10];  
в объявлении класса?

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


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

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



Цитата(Bugmaker @  6.11.2010,  12:47 Найти цитируемый пост)
А разве нужно не 
int* data=new int[10];  
в объявлении класса?

нет, это не C#
PM   Вверх
Vovan222
Дата 6.11.2010, 13:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



azesmcar, в дебагире посмотрел, 
user posted image
PM MAIL   Вверх
Bugmaker
Дата 6.11.2010, 13:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Впринциипе да... указатель это ведь всего лишь переменаня содержащая адрес... в данном случае адрес первого элемента насколько я понимаю?
PM MAIL   Вверх
leniviy
Дата 6.11.2010, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Дебагер не знает размер массива. Например char *a = "abcde" в дебагере покажет только 'a'
PM MAIL   Вверх
Bugmaker
Дата 6.11.2010, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



То есть первый элемент. Так ведь и должно быть?? указатель на массив это указатель содержащий адрес первого элемента данного массива. ведь так? Он впринципе до запуска не может знать количество элементов массива и само собой его размерность.

Это сообщение отредактировал(а) Bugmaker - 6.11.2010, 13:09
PM MAIL   Вверх
azesmcar
Дата 6.11.2010, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

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



Vovan222

Ну ты ему даешь указатель он его и показывает, а то, что твоя программа не вылетает в цикле 
Цитата(Vovan222 @  6.11.2010,  12:24 Найти цитируемый пост)
    for(short i = 0; i < 10; i++)
        data[i] = i;

говорит о том, что все у тебя нормально выделилось.
PM   Вверх
Bugmaker
Дата 6.11.2010, 13:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



можно проверить добавив в цикл сторку вида:

Код

cout <<  data[i] << &data[i]<<endl;


И посмотреть адреса и значения всех элементов...

Это сообщение отредактировал(а) Bugmaker - 6.11.2010, 13:11
PM MAIL   Вверх
Vovan222
Дата 6.11.2010, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



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

int data[10];

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

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

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

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

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


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

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


 




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


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

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