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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Выделение памяти, не вкурю 
:(
    Опции темы
ip127001
Дата 7.2.2007, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



здрасти...объясните плиз

создаем что-то типа буфера

char buf[100];-100 чаров
потом из этой памяти берем определенное число
char * p=new (buf)char[120]-чаров

почему компилятор не выдает ошибки...разве тут не будет переполнения..
даже если for'ом заполнить область на которую ссылается p...ошибки тоже не возникает...
в чем прикол...мож я что недопонял :qstn
--------------------
aqua currit et debere currere ut currere solebat
PM MAIL   Вверх
SerpentVV
Дата 7.2.2007, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



С++ не проверяет границы массивов при работе с указателями...
Компилятор не в состоянии отследить значение компилятора во время выполнения, поэтому считает, что программер знает, что делает...

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


Бывалый
*


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

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



Цитата(SerpentVV @  7.2.2007,  17:21 Найти цитируемый пост)
С++ не проверяет границы массивов при работе с указателями...
Компилятор не в состоянии отследить значение компилятора во время выполнения, поэтому считает, что программер знает, что делает...

от оно как..лан спасибо вопрос исчерпан... smile

Добавлено @ 17:28 
ух ты какой кавардак будет если напортачить... smile 
--------------------
aqua currit et debere currere ut currere solebat
PM MAIL   Вверх
Sartorius
Дата 7.2.2007, 17:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата

ух ты какой кавардак будет если напортачить...   

 Не хочешь сам контролировать доступ к памяти - используй managed технологии. Такие как Java и .NET
PM MAIL ICQ   Вверх
ip127001
Дата 7.2.2007, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(Sartorius @  7.2.2007,  17:31 Найти цитируемый пост)
Не хочешь сам контролировать доступ к памяти - используй managed технологии. Такие как Java и .NET

нет уж...я привык думать сам!
--------------------
aqua currit et debere currere ut currere solebat
PM MAIL   Вверх
SerpentVV
Дата 7.2.2007, 17:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Вместо массивов используй стандартный контейнер vector из STL. Тогда не придется следить за индексами...
Там еще и list eсть и stack и queue... smile 
PM MAIL   Вверх
Любитель
Дата 7.2.2007, 18:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

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



Есть кстати куча всяких коде-анализеров, которые подобные ошибки находят. Для большого сишного кода - достаточно приятно (для плюсов - спасают готовые контейнеры, смарт-поинтеры и пр.).


--------------------
PM MAIL ICQ Skype   Вверх
Daevaorn
Дата 7.2.2007, 19:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



странный вопрос
Цитата(ip127001 @  7.2.2007,  18:18 Найти цитируемый пост)
char buf[100];-100 чаров

на стеке. buf указывает на начало
Цитата(ip127001 @  7.2.2007,  18:18 Найти цитируемый пост)
char * p=new (buf)char[120]-чаров

менеджер памяти ссылается на UB и делает всё что вздумается, скорей всего убивает стек.
PM MAIL WWW   Вверх
Любитель
Дата 7.2.2007, 19:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

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



Если повезёт - может пролететь  smile Управление паметью непостижимо...


--------------------
PM MAIL ICQ Skype   Вверх
Rockie
Дата 7.2.2007, 19:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(ip127001 @  7.2.2007,  17:18 Найти цитируемый пост)
почему компилятор не выдает ошибки...

у меня в VS2005 выдает, C2660

Цитата(ip127001 @  7.2.2007,  17:18 Найти цитируемый пост)
даже если for'ом заполнить область на которую ссылается p...ошибки тоже не возникает...

даже если напишешь
Код

#include "stdafx.h"

int main()
{
    char buf[100];
    buf[1000] = 'a';
    return 0;
}

то это как "повезет-не повезет"




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


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

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



Код

// main.c

#include <stdio.h>

int main()
{
   char* s = "!!!";
   s[1] = "?";
   printf(s);
   return 0;
}

В VS2005 деьаг версия успешно компилится и успешно вылетает. Самое интересное, что релиз тупо выводит три восклицтаельных знака  smile 


--------------------
PM MAIL ICQ Skype   Вверх
Anikmar
Дата 7.2.2007, 20:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Любитель @  7.2.2007,  19:30 Найти цитируемый пост)
   s[1] = "?";

И как такое смогло скомпилиться? Я что-то не понял...


 smile 
Блин! Я что, перестал русский язык знать?! Что не пост - то ошибка в родном языке! Иногда править ленюсь, а потом стыдно! Наверное это программерская болезнь...

Это сообщение отредактировал(а) Anikmar - 7.2.2007, 20:50
PM MAIL ICQ   Вверх
threef
Дата 7.2.2007, 21:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата

char * p=new (buf)char[120]


Откуда взялся такой синтаксис ?
PM MAIL   Вверх
Anikmar
Дата 7.2.2007, 21:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



threef, я привел цитату Любителя - выше моего поста.... Он написал, что компилится нормально, а я удивился - как такое может скомпилиться?
PM MAIL ICQ   Вверх
threef
Дата 7.2.2007, 21:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



а я из loopback-а, с первого поста. 
Компилится, работает smile
остается предложить сделать delete [] p
Пойду за мылом и веревкой.
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.0582 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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