Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Xentar
Of Wolf and Man
993 / 188 / 4
Регистрация: 09.07.2008
Сообщений: 1,885
#1

Впадаю в страшную рекурсию... еще вопрос по указателям - C++

17.11.2008, 17:31. Просмотров 872. Ответов 8
Метки нет (Все метки)

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

Вопрос не нашел на просторах инета, нашел только что написал изначально не правильно, хотя работало ( хоть не так как надо ), а потом написал правильно, но тоже работало (хотя тоже не так как надо).

Создаю я массив переменных в объекте, через указатель дальше присваиваю ему какие то значения, потом пытаюсь их изменить, потом пытаюсь их считать.

При попытке изменить значения происходит вылет из программы
Код
class cArray{
public:
        char    *ptr;
        cArray(void){ptr=new char[1000000];}
        ~cArray(){delete[]ptr;}
        cArray( const cArray &a ){
                ptr = new char [1000000];
                memcpy( ptr , a.ptr , 1000000 );
                printf("%s","конструктор копий");
        }
        cArray  operator=( cArray & a ){
                ptr = new char [1000000];
                memcpy( ptr , a.ptr , 1000000 );
                printf("%s","оператор присваивания");
                return( *this );
        }
};

cArray a;

int main () {
    [COLOR=Red]a.ptr="fuтk"[/COLOR];

/* [COLOR=Green]a.ptr[0]=140;
    a.ptr[1]=141;
    a.ptr[2]=142;
    a.ptr[3]=143;[/COLOR] */
    
/*  [COLOR=DarkOrange]*(a.ptr+1)=100;[/COLOR] */
    
   
    [COLOR=Blue]printf("%c\n",*(a.ptr+1));
    [/COLOR][COLOR=Blue]printf("addres of array %p\n",a.ptr);[/COLOR]
   [COLOR=Blue] printf("%c\n%c\n%c\n%c\n",a.ptr[0],a.ptr[1],a.ptr[2],a.ptr[3]);[/COLOR]
    
    system("pause");
}
На перегруженный конструктор не смотреть - это то с чем я сейчас разбираюсь.

Красным
выделенно то как я заполняю массив.
Синим выделен вывод массива, причем оба метода работают.
Зеленым и Желтым выделены изменения вносимые в массив, выполнены разными способами (моим и правильным) и при использовании с Красным методом заполнения массива - не работают, хотя друг с другом ладят.

Вопрос № РАЗ - можно ли заполнять и читать массивы моим Зеленым методом, и чем отличается от правильного Желтого метода ? Чем это черевато ?

Вопрос № ДВА - почему они не работают вместе с красным методом изменения массива ?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.11.2008, 17:31
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Впадаю в страшную рекурсию... еще вопрос по указателям (C++):

Вопрос по указателям - C++
Ребят, простите за такую глупость, но вот не знаю как ответить на чётко поставленный преподавателем вопрос : "Как зная указатель на...

Вопрос по указателям - C++
В учебнике Дейтелов нашел код: void convertToUppercase(char *); int main() { char string = "characters and $32.98"; ...

Глупый вопрос по указателям? - C++
Здравствуйте! Подскажите как это работает? Правильно ли я понимаю? struct A { }; struct B: public A { int var1; ...

Еще один вопрос по VC++? Несколько ToolBar как это сделать? - C++
При созданиии диалогового окна создается форма но на ней я не могу подключить ToolBar, меню подключается но пока не запущено приложение...

Вопрос чайника по указателям. - C++
Как по русски предельно лаконично и понятно можно истолковать выделенную часть? bind( m_socket, (SOCKADDR*) &service, sizeof(service) ) ...

Еще один вопрос - MS Access
Прошу прощения если помешала. У меня возник еще один вопрос: вот моя прога. Мне нужно, чтобы в поля serФамилия, serИмя, serОтчество...

8
Vourhey
Почетный модератор
6486 / 2260 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
17.11.2008, 17:45 #2
Немного не понял, что в итоге нужно, но
Код
 a.ptr="fuтk";
Говорит о том, что ptr будет указывать на константу. Отсюда и пляши.

Есть специальные функции для работы со строками strncpy, strcmp и т. д.. Лучше юзать их.
1
Xentar
Of Wolf and Man
993 / 188 / 4
Регистрация: 09.07.2008
Сообщений: 1,885
17.11.2008, 17:47  [ТС] #3
Цитата Сообщение от Vourhey Посмотреть сообщение
Говорит о том, что ptr будет указывать на константу. Отсюда и пляши.
Спасибо. это ответ на второй вопрос.
Цитата Сообщение от Vourhey Посмотреть сообщение
Есть специальные функции для работы со строками strncpy, strcmp и т. д.. Лучше юзать их.
Здесь не работа со строками, а работа с указателями на массивы я рассматриваю

А на первый могёшь ответить ? мне он более интересен.
0
Vourhey
Почетный модератор
6486 / 2260 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
17.11.2008, 17:53 #4
Можно. И читать и заполнять. Методом записи отличается. Главное, чтобы ты на константах этого не делал. А так, все ок.
1
Xentar
Of Wolf and Man
993 / 188 / 4
Регистрация: 09.07.2008
Сообщений: 1,885
17.11.2008, 17:57  [ТС] #5
С константой я понял свою ошибку.
Чисто интуитивно я использовал зеленый метод.
А вот на просторах инета - давался везде желтый метод.
Просто я подумал что из за моего "неправильного" метода, в будущем, при использовании могут возникнуть какие-нить проблемы.

Спасибо !
0
Vourhey
Почетный модератор
6486 / 2260 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
17.11.2008, 18:08 #6
чтобы было совсем понятно:
вот так нельзя:
Код
    char* s="fuтk";

	*(s)='a';
    s[1]='s';
    s[2]='d';
    s[3]='f';
а вот так можно:

Код
	char *s2 = (char*)malloc(4);
	s2[0] = 'd';
    s2[1]='s';
    s2[2]='d';
    s2[3]='d';
0
Xentar
Of Wolf and Man
993 / 188 / 4
Регистрация: 09.07.2008
Сообщений: 1,885
18.11.2008, 11:13  [ТС] #7
Отличие оператора NEW от оператора MALLOC какоенибудь есть ?

Добавлено через 2 минуты 15 секунд
NEW - выделяет область на N элементов, умножить на кол-во байт занимаемым одним эелементом. (будь то int 4 байта, будь то char 1 байт);
MALLOC - выделяет заданную область в байтах.
Я правильно понял ?
0
Vourhey
Почетный модератор
6486 / 2260 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
18.11.2008, 13:31 #8
Цитата Сообщение от Xentar Посмотреть сообщение
Отличие оператора NEW от оператора MALLOC какоенибудь есть ?

Добавлено через 2 минуты 15 секунд
NEW - выделяет область на N элементов, умножить на кол-во байт занимаемым одним эелементом. (будь то int 4 байта, будь то char 1 байт);
MALLOC - выделяет заданную область в байтах.
Я правильно понял ?
Не, неправильно. Тут уже обсуждалась тема, типа, что лучше юзать new или malloc. Найди ее. Там все есть.
1
Xentar
Of Wolf and Man
993 / 188 / 4
Регистрация: 09.07.2008
Сообщений: 1,885
18.11.2008, 13:40  [ТС] #9
ты написал то же самое что и я сдесь, только другими словами и в другой теме.

Спасибо!
- тема закрыта.
0
18.11.2008, 13:40
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.11.2008, 13:40
Привет! Вот еще темы с ответами:

еще один вопрос по Localhost - Web
для его работоспособности требуется подключение к Инету? т.к. вроде у меня все работало, но как обрубили траффик, при вводе...

Функция подробнее и еще вопрос - Joomla
Доброго времени суток. У меня возникла парочка вопросов: Можно ли сделать так, что бы не выводилось в полном материале (то, что я писал...

И еще вопрос Ассеss2000 в Access97 - Базы данных
Можно ли перенести базу , написанную на Access2000 в базу Access97?

Еще вопрос по поводу SQL запроса - MS Access
Подскажите пожалуйста как решить след. задачу: имеются две таблицы, они не связаны - таблица1 (первичный ключ, инструмент1, ......) ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru