Вот здесь есть библиотека memoryExplorer. Она не только количество показывает, но и фрагемнтацию на куски. Там в посте полно примеров её использования. Кстати в том посте подробно разбирается Ваша ошибка из этого поста - возврат указателя на уничтожаемую переменную.
Вы почитали бы тот пост. Я ведь не для того его писал, чтобы по сто раз повторять одно и тоже. Там ВСЁ написано.
Ну, например, переменная target из строки №8 (даже если бы Вы там правильно запросили память) не имеет никакого отношения к перемнной target из строки №10. Это РАЗНЫЕ переменные! В строке №10 будет использована переменная из строки №1. А запрошенная Вами в строке 8 память будет просто потеряна. И, кстати, в строке №8 Вы опять запрашиваете 1 байт, а вовсе не k+1 как Вы думаете.
Прочитайте все три этюда про память, внимательно, разбирая примеры. Потом перепишите программу. Именно в таком порядке: сначала внимательно прочитайте. а потом к программе, т.к. Ваше "а пока здесь" не работает.
Валера, я вам уже писал, что вы ничерташеньки не сечета в строках и указателях - а вы продолжаете терзать сообщество своим вырвиглазным кодом. Возьмите паузу на недельку, вдумчиво, как советутовали уже. изучите книжки. и только потом приходите. Нет уже сил смотреть на эти бессмысленные куски иностранных букв, которые вы почему-то считаете программой....
код в #76 - в строке 7 опять выход ха границу массива. И к чему вообще этот кусок? - зачем весь массив забивать нулями ? не проще было бы оставить однократное добавление нуля в конце?
поправка - выхода за границу вроде нет, единицу не увидел. Но вопрос "зачем это" остался
Не надо общими словами - "мир во всём мире и чтобы не было войны".
Надо из входного массива ... с типом ..., содержащего строку utf-8 произвести трансформацию в строку ASCII копированием/заменой/... в выходной массив ... с типом ... и т.п.
Вы сейчас пишете что-то для массива в RAM, потом ему в реальном коде подсунете указатель на ROM, получите треш и угар. Будете потом опять башку чесать - а что же тут не то, работало ж.
Фильм один видел как-то по Культуре. Не целиком, а фрагмент. Названия не помню абсолютно. Главный герой - изобретатель деревенский. В пекарне сделал перемешиватель теста из велосипеда, ещё чего-то... И у него был такой "подручный" - дед-пенсионер. Дал изобретатель задание ему - на досочках разные картинки вырезать, чтобы на пряниках отпечатывать.
Сцена: главный герой на результат работы смотрит и этого деда спрашивает - "а чего этот, на лошади, змеюку палкой тыкает?" Дед ему в ответ - "а чтобы неповадно было!"
Сцена: главный герой на результат работы смотрит и этого деда спрашивает - "а чего этот, на лошади, змеюку палкой тыкает?" Дед ему в ответ - "а чтобы неповадно было!"
Свят Георгий во бою...
На белóм сидит коню
Держит в руце копие
Колет змия в жопие
Потихоньку переползаю с ардуино вайринга, на атмел студию
меня всегда поражает - почему "уйти от ардуино" в первую очередь тянет тех, кто вовсе "не программист" ? Почему от Евгения или Sadman41 или dimax-а вы не слышите жалоб на то, что вайринг не дает им выразить себя? :)
Вы может думаете, что глюки ваших программ - от "кривого вайринга"? :) - вы ошибаетесь.
b707, я хочу просто научиться прорамировать напрямую , например через регистры, вайринг это делает за меня, а не выражать себя, от меня вы хоть раз слышали слова о кривом вайринге?
Валера, прошу прощения за высказывания... но мне кажется. вам надо в первую очередь базовые понятия Си подтянуть - ссылки. массивы, строки, битовые операции... а регистры - это тупая конкретика, ее освоить недолго, когда база есть.
Потихоньку переползаю с ардуино вайринга, на атмел студию
Сейчас я Вам расскажу страшный секрет переползания, только не палите, что это я Вам сказал.
1. Берёте из поставки Adruino IDE два файла: WString.h и WString.cpp;
2. Копируете их в свой проект в студии;
3. Пользуетесь String в студии сколько душе угодно.
можно и через for, просто strcat вызывается много раз
Да можно вообще без них так-то.
да можно и не очищать, вместе с *ptr = 0; канет в лету , но по мне так лучше очистить
Повеселил! Ну ооочень тормознутая :)
Вывод на графический дисплей одной строки занимает больше времени чем все strcat'ы в функции utf8rus().
Вот без strcat (на Ардуине не проверял):
не жесть, а 4 строки по 21 символу на 1мс, относительно моего
:)
не жесть, а 4 строки по 21 символу на 1мс, относительно моего
Так я ж и говорю.
ЕвгенийП, где-то вы ссылку давали на скетч проверки кол-ва памяти, найти не могу, поделитесь
Вот здесь есть библиотека memoryExplorer. Она не только количество показывает, но и фрагемнтацию на куски. Там в посте полно примеров её использования. Кстати в том посте подробно разбирается Ваша ошибка из этого поста - возврат указателя на уничтожаемую переменную.
Спасибо, а пока здесь какие есть ошибки
Вы почитали бы тот пост. Я ведь не для того его писал, чтобы по сто раз повторять одно и тоже. Там ВСЁ написано.
Ну, например, переменная target из строки №8 (даже если бы Вы там правильно запросили память) не имеет никакого отношения к перемнной target из строки №10. Это РАЗНЫЕ переменные! В строке №10 будет использована переменная из строки №1. А запрошенная Вами в строке 8 память будет просто потеряна. И, кстати, в строке №8 Вы опять запрашиваете 1 байт, а вовсе не k+1 как Вы думаете.
Прочитайте все три этюда про память, внимательно, разбирая примеры. Потом перепишите программу. Именно в таком порядке: сначала внимательно прочитайте. а потом к программе, т.к. Ваше "а пока здесь" не работает.
ЕвгенийП, спасибо, бегло прочел, и понял, из-за фрагментации нужно использовать только статический массив, на досуге вдумчиво прочитаю
:)
Valera19701 похоже не понял: target[j] = 0 завершает строку нулём (так надо для работы со строками), а return target возвращает всю строку.
тогда не так, а так target[j + 1] = '\0'
тогда не так, а так target[j + 1] = '\0'
там есть инкремент выше
тогда не так, а так target[j + 1] = '\0'
Неправильно так как target[j+1] может выйти за границы массива, '\0' = 0.
xDriver, да точно, инкремент на выходе из while будет выше, просчитался
Неправильно так как target[j+1] может выйти за границы массива, '\0' = 0.
Поскольку массив состоит из одного символа (см стр. №1) , она не "может выйти", а "не может не выйти".
массив состоит из одного символа
И тому уже free сказали в седьмой строке. Правда, неправильно.
Неправильно так как target[j+1] может выйти за границы массива, '\0' = 0.
Поскольку массив состоит из одного символа (см стр. №1) , она не "может выйти", а "не может не выйти".
Это касается моего кода в посте #54 - в нём может выйти.
А, сорри, а я последний код топика (#61) обcуждаю - недоразумение вышло :)
до этого я б даже с жесточайшего збадуна не додумалса бы
06
if
(*target) {
07
delete[] target; *target = 0x00;
08
char
* target =
new
char
(k + 1);
09
}
Дык, я ж говорю ТС: "почитай этюды про память", а он всё "потом, а сейчас скажи, что не так" :)))
до этого я б даже с жесточайшего збадуна не додумалса бы
придете вы со схемой , где в source n-channel mosfet нагрузка стоит :)
arduinec, вот так я думаю будет лучше или нет?
Валера, я вам уже писал, что вы ничерташеньки не сечета в строках и указателях - а вы продолжаете терзать сообщество своим вырвиглазным кодом. Возьмите паузу на недельку, вдумчиво, как советутовали уже. изучите книжки. и только потом приходите. Нет уже сил смотреть на эти бессмысленные куски иностранных букв, которые вы почему-то считаете программой....
код в #76 - в строке 7 опять выход ха границу массива. И к чему вообще этот кусок? - зачем весь массив забивать нулями ? не проще было бы оставить однократное добавление нуля в конце?
поправка - выхода за границу вроде нет, единицу не увидел. Но вопрос "зачем это" остался
до этого я б даже с жесточайшего збадуна не додумалса бы
придете вы со схемой , где в source n-channel mosfet нагрузка стоит :)
боюсь, до этого я тоже не додумаюсь.
Валера, вы бы для начала сформулировали, чего пытаетесь добиться. Иначе всё по кругу ходите.
sadman41, хотел добиться универсальности, и скорости, и чтобы не смотреть на размер строки
Не надо общими словами - "мир во всём мире и чтобы не было войны".
Надо из входного массива ... с типом ..., содержащего строку utf-8 произвести трансформацию в строку ASCII копированием/заменой/... в выходной массив ... с типом ... и т.п.
Вы сейчас пишете что-то для массива в RAM, потом ему в реальном коде подсунете указатель на ROM, получите треш и угар. Будете потом опять башку чесать - а что же тут не то, работало ж.
b707, я не знаю как у програмистов по феншую, очищать массив или добавляать конец строки?
я не програмист по професии, а электронщик, а это просто хобби
sadman41, мне нужно такой же функционал как в прототипе со String, чтоб не смотреть на размер входящей строки, а уже из ром или рам там я уже разрулю
String и так написан для того, чтобы не смотреть "на размер". Сомневаюсь, что вы напишете что-то более подходящее.
как у програмистов по феншую, очищать массив или добивать конец строки?
от контекста зависит. В данном случае очищать незачем
я не програмист по професии, а электронщик, а это просто хобби
если вы пытаетесь программировать - значит в этот момент своей жизни вы программист. А по профессии мы тут все или почти все - не программисты.
А зачем target забивать нулями ?
из ром или рам там я уже разрулю
:-)))))
ЕвгенийП, вот из ром, что-то опять не так
Так ото ж!
sadman41, мне нужно такой же функционал как в прототипе со String
А чем не устраивает String?
ну колитесь что не так?
А зачем target забивать нулями ?
Фильм один видел как-то по Культуре. Не целиком, а фрагмент. Названия не помню абсолютно. Главный герой - изобретатель деревенский. В пекарне сделал перемешиватель теста из велосипеда, ещё чего-то... И у него был такой "подручный" - дед-пенсионер. Дал изобретатель задание ему - на досочках разные картинки вырезать, чтобы на пряниках отпечатывать.
Сцена: главный герой на результат работы смотрит и этого деда спрашивает - "а чего этот, на лошади, змеюку палкой тыкает?" Дед ему в ответ - "а чтобы неповадно было!"
А чем не устраивает String?
Потихоньку переползаю с ардуино вайринга, на атмел студию
Сцена: главный герой на результат работы смотрит и этого деда спрашивает - "а чего этот, на лошади, змеюку палкой тыкает?" Дед ему в ответ - "а чтобы неповадно было!"
Свят Георгий во бою...
На белóм сидит коню
Держит в руце копие
Колет змия в жопие
Потихоньку переползаю с ардуино вайринга, на атмел студию
меня всегда поражает - почему "уйти от ардуино" в первую очередь тянет тех, кто вовсе "не программист" ? Почему от Евгения или Sadman41 или dimax-а вы не слышите жалоб на то, что вайринг не дает им выразить себя? :)
Вы может думаете, что глюки ваших программ - от "кривого вайринга"? :) - вы ошибаетесь.
b707, я хочу просто научиться прорамировать напрямую , например через регистры, вайринг это делает за меня, а не выражать себя, от меня вы хоть раз слышали слова о кривом вайринге?
Валера, прошу прощения за высказывания... но мне кажется. вам надо в первую очередь базовые понятия Си подтянуть - ссылки. массивы, строки, битовые операции... а регистры - это тупая конкретика, ее освоить недолго, когда база есть.
А чем не устраивает String?
Потихоньку переползаю с ардуино вайринга, на атмел студию
Сейчас я Вам расскажу страшный секрет переползания, только не палите, что это я Вам сказал.
1. Берёте из поставки Adruino IDE два файла: WString.h и WString.cpp;
2. Копируете их в свой проект в студии;
3. Пользуетесь String в студии сколько душе угодно.
ЕвгенийП, ответить с сарказмом или без?