А>Все вроде бы ок, но пытаясь удалить через delete вполучаю эксепшн. У кого какие догадки?
Что здесь делает оператор взятия адреса '&' ? Зачем ты его туда поместил и что по-твоему он там делает?
С точки зрения С++ это код некорректен. Результат new expression не является lvalue и, поэтому, оператор взятия адреса к нему неприменим. Компилятор должен выдавать сообщение об ошибке. Если твой компилятор не выдает такого сообщения, то остается только гадать, как же он понимает этот код (неудивительно, что все в конечном итоге рушится).
Если уж ты хочешь доступаться к выделенной памяти через такой указатель, то никакой оператор взятия адреса тут не нужен
char (*varray)[200] = (char (*)[200]) new char[200];
char (*varray)[200] = (char (*)[200]) new char[200];
А я что-то вообще не могу понять, какой тип имеет переменная varray?
Массив из двухсот указателей на char? Похоже, что нет — иначе такой хитрый синтаксис new не нужен.
Указатель на массив из двухсот char'ов? Тоже навряд, ибо тогда вообще непонятно, зачем он такой нужен.
Так какой тип?
А>Все вроде бы ок, но пытаясь удалить через delete вполучаю эксепшн. У кого какие догадки?
Как я понимаю — это указатель на 200 char.
Это можно объявить просто:
char *varray = new char[200];
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, Vamp, Вы писали:
V>Указатель на массив из двухсот char'ов?
Именно так.
V>Тоже навряд, ибо тогда вообще непонятно, зачем он такой нужен. V>Так какой тип?
Например, чтобы передать его в функцию, у которой в качестве параметра массив из 200 char'ов. Хотя особенно интересно такое приведение типа в случае многомерных массивов. new не умеет создавать многомерных массивов, но используя такое явное приведение можно избавиться от необходимости "ручного" пересчета индексов многомерного массива на индекс полученного через new одномерного массива.
V> char (*varray)[200] = (char (*)[200]) new char[200];
V>
V> А я что-то вообще не могу понять, какой тип имеет переменная varray? <...> V> Указатель на массив из двухсот char'ов?
Именно.
V> Тоже навряд, ибо тогда вообще непонятно, зачем он такой нужен.
Отчего же?.. Например, представь себе ситуацию, когда у тебя есть 20 подобных массивов
и по какому-то условию надо проинициализировать подобный указатель одним из них, и дальше
по коду (возможно, до какого-то другого момента) работать именно с этим "избранным" массивом.
Posted via RSDN NNTP Server 1.6 RC1
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
char'ов. Хотя особенно интересно такое приведение типа в случае многомерных массивов. new не умеет создавать многомерных массивов, но используя такое явное приведение можно
Неверное утверждение.
char (*ar)[10][20] = new char[100][10][20];
delete [] ar;
Of course, the code must be complete enough to compile and link.
V>> А я что-то вообще не могу понять, какой тип имеет переменная varray? <...> V>> Указатель на массив из двухсот char'ов? ПК>Именно. ПК>Например, представь себе ситуацию, когда у тебя есть 20 подобных массивов ПК>и по какому-то условию надо проинициализировать подобный указатель одним из них, и дальше
То есть, если я правильно понял, смысл — в контроле на этапе компиляции? Что бы не передавать неизветно что туда, где годятся именно 200-символные массивы чар?