Mar
ну все равно не суть, я к чему
Berkus
статически это когда ты ее за main() вынесешь
Mar
ты ж видишь что адрес один и тот же
Mar
так вот вопрос почему?
Mar
потому что если малочить то один адрес пониже будет, а второй в heap
Mar
Berkus
потому что адрес массива равен адресу его первого элемента
Berkus
когда ты маллоком выделяешь у тебя просто укатель, на массив или на массив - никто не знает
Mar
но адрес переменной в этом случае тоже равен ссылке на первый элемент массива
Berkus
потому что имя массива указывает на его первый элемент
Mar
это я понимаю, как я понял у меня не получается правильно сформулировать вопрос
Berkus
char *arr[30]; std::cout << std::hex << arr << std::endl; std::cout << std::hex << &arr << std::endl; std::cout << std::hex << &arr[0] << std::endl; это всё одно и то же
Mar
второе и третье идентичны
Mar
ааай, щас погоди, я сформулирую
Mar
я попробую поближе к проблеме 1) у меня есть структуры, они замалочены где то в памяти, у меня есть ссылки на них, эти структуры -- комнаты, у которых есть ссылки на некоторые другие комнаты, либо никаких ссылок 2) моя цель -- найти кратчайший путь с точки А в точку Б, потенциальное решение я сохраняю в массиве поинтеров на эти комнаты 3) мне надо сохранить все возможные решения где либо, и я решил выбрать массив указателей на массив указателей на структуру 4) у меня теперь проблемы с тем как его оформить, сейчас я создал глобальную переменную rooms **solution[30], я могу замалочить, но в таком случае мне придется сделать ***solution и потом выделять сюда память, малочить не хочу, если это можно не делать, так вот вопрос: с первым вариантом(**solution[30]) зайдет? Пытался, пока что путаюсь
Berkus
используй вектор, ы?
Berkus
зачем эти велосипеды
Mar
У меня тут такой момент, это задание в котором я не могу использовать даже strlen, писать функции можно только свои, при чем только на си
Berkus
using Solution = std::vector<std::weak_ptr<Room>>; тебе все сделает, если надо много решений - сунь их в вектор using Solutions = std::vector<Solution>;
Berkus
ну заимплементи свой мини-вектор, malloc+realloc тебе в руки
Mar
Мне надо разобраться именно в этом, что и как и куда, может есть у кого обьяснения что да и как?
Berkus
ну да, будет работать, кривовато но я не вижу принципиальных отличий
Berkus
> 3) мне надо сохранить все возможные решения где либо, и я решил выбрать массив указателей на массив указателей на структуру поясни смысл своего решения?
Berkus
и как оно будет работать без динамической аллокации
Mar
алгоритм есть рекурсивный, который как только находит решение (перебирает все возможные) делает как финальный этап Дейкстры -- идет по своим следам назад (есть ссылка на предыдущий элемент) А, я еще маллоком выделяю (в зависимости от длинны пути) массив поинтеров на структуры, адрес которого пихаю в статически выделенные массивы, о которых я говорил
Myself
Парни, простите за ламерство, но не могу въехать в суть вопроса. Есть набор комнат, в каждой ссылки на "соседние", надо в каждую прописать мин пути до каждой?
Myself
Правильно понял?
Mar
Некоторые комнаты могут не иметь ссылок на нужные, то есть могут иметь ссылки на тупиковые комнаты, алгоритм, который решает это все уже есть, но раньше я записывал одно решение, которое я запихивал в массив поинтеров на структуры, но теперь мне надо записать все потенциально возможные решения
Ioann_
Кинь код
Mar
Mar
Структура комнаты:
Mar
Mar
Решение:
Mar
Mar
Бэктрекинг (запись в массив, с которым у меня проблемы):
Mar
Mar
А, и еще то, что у меня пока отвечает за потенциальные решения:
Mar
Если мало, могу залить на гитхаб, но я не думаю что сильно поможет
Ioann_
Нормально :)
Купи
Трехмерный массив😱
Mar
нет
Mar
Mar
array 30 of pointer to pointer to char
Mar
в моем случае на структуру
Ioann_
Room now в начале равен нулю ?
Mar
да, это по сути итератор в текущей комнате, мол, сколько прошел уже
Ioann_
Так, и в чем проблема - зарепли еще раз
Mar
Так вот я не хочу юзать ***solution = malloc...(blabla) а хочу выделить для этой ссылки статически выделенную переменную **solution[30]
Mar
***solution = malloc...(blabla) И **solution[30] идентичны по функциональности?
Ioann_
Так а в чем беда то ?
Ioann_
С той записью что ты выше выложил - надо быть аккуратным
Ioann_
Там можно создать две разные сущности
Mar
***solution = malloc...(blabla) И **solution[30] идентичны по функциональности?
Mar
Мне интересно идентичны ли они в теории
Mar
Вообще у меня сигфолт при печати, не в ту область памяти лезу
Mar
Mar
Вот здесь в printf сигфолтит, где то не туда лезу
Mar
но где -- для меня загадка
Mar
gdb говорит что принтф
vladislav
кстати ребят, а вот есть в интернетике различные сертификаты, которые подтверждают что ты специалист по такой-то технологии, насколько они важны для карьеры?
Evgen
->???
Mar
-> это переход по ссылке
Mar
(ну это и так понятно :) я к тому что, что там не так?
Ioann_
А у тебя ведь солюшн тройной массив
Mar
Вроде да
Просто в таком случае получается что ***solution и **solution одинаковы
Mar
черт, да ну, погоди
Mar
нет, не так
Ioann_
Гожу
Evgen
-> это переход по ссылке
В курсе, но нужно ли оно там?
Mar
при первом разыменовании я перехожу по ссылке на ссылку, при втором, я прихожу к ссылке на структуру, и с ссылки на структуру я перехожу через -> на саму структуру
Ioann_
И с чего ты взял
Ioann_
Что while
Mar
cdecl есть штука такая
Mar
а, там кстати такой момент
Ivan
Парни, объясните семантику перемещения на памяти. Память это ресурс. Ресурс можно копировать, можно передать по ссылке. Что вообще первоначально вкладывали в move. Не только лишь С++
Mar
надо занулитьс
Ioann_
Ну то есть чтобы из вайл вышло надо чтобы там нулптр был
Ioann_
Может в этом проблема ?
Mar
может быть, сейчас