динамична памет - въпрос
Здравейте,
въпросчето е към материала от предишното издание на курса, как могат да се разположат неопределен брой стрингове (примерно броят да се въвежда от конзолата) с различна дължина, на случайни начални позиции, като след четене на всеки стринг да се генерира позиция за него в блок с памет с определена големина, N байта? С една if проверка ще го приключваме когато не съществува свободна позиция вече, но как да проверим дали има още място в новото парче памет?
И разполагането на случайни позиции как става? С new и list ли? Нямам си и представа това случайно разполагане как става в новото парче памет.
Не точно на ниско ниво, но с подобен ефект.
Опитах се да го разпиша нато код, но при положение че стринговете са с неизвестна дължина (по условие) и програмата трябва да приключи 1/ ако динамичната памет се напълни или 2/ потребителят да я приключи преди напълване и с въвеждане на празен стринг (Как се въвежда от конзолата празен стринг?? Аз си дефинирах 0 за == "emptyString", има ли нещо по-добро?)
Въвеждам допълнителен вектор, който е "генератор" на произволни индекси чрез random_device и shuffle, като всеки път erase-вам числото което взимам (ползвам нулевия индекс), за да не се презаписват стринговете от вход, ако се падне същия случаен int от вектора.
Но, не мисля че това е правилното решение, защото трябва да се държи сметка за изчерпването на броя байтове, големината на заделената динамичната памет. N в случая с допълнителния вектор го ползвам като индекси на int-ове, което за системата и Windows е 4 байта x 8 бита, въпросът е какво правим ако стринговете са по-големи? Вероятно трябава да се изчислява свободната динамична памет, всеки път след въвеждане на стринг, което не е проблем. Но, как ще се генерира след това случаен индекс, и, така има опасност някои индекси, генерирани по-напред, да се окажат невалидни.
Иначе, написах не така усложнено решение:
https://pastebin.com/6Sefwdxp
Много въпроси :)
Би ли дала пълното условие на задачата или линк към него, за да се ориентирам по-точно в проблема?
Иначе, празен стринг от конзолата се въвежда с натискане на Enter без да има други символи на този ред. В C++ може да го засечеш чрез getline, напр: