1 / 1 / 1
Регистрация: 23.03.2017
Сообщений: 101
1

set и map при добавлении сохраняется только последний элемент. Размер множества всегда равен 1

02.12.2019, 10:58. Показов 1407. Ответов 3
Метки нет (Все метки)

При вызове функции с параметрами (declare some_string) в множество добавляется элемент, и он заменяет собой предыдущий. В итоге, всегда остается только 1 элемент, и размер множества тоже =1.

Вызываю:
>>> declare str
str 1
>>> declare some_string
some_string 1
>>> declare aaaaa
aaaaa 1

Объявление:
C++
1
std::set <char*> Variables;
Функция:
C++
1
2
3
4
5
6
7
8
9
10
11
12
int smallsh_declare(char **args)
{
    set <char*>::iterator it;
    char * s = new char [1024];
    s = args[1];
    Variables.insert(s);
    for (it = Variables.begin(); it != Variables.end(); it++) {
        char* s = *it;
        printf("%s %d", s, Variables.size());
    }
    return 1;
}
Вообще мне нужно хранить ключ-значение (declare my_key some_value), поэтому пробовал использовать map, но там точно такая же ситуация.
Пробовал выделять память под строку, но это не помогает. Не знаю, что за фигня там творится.

Подскажите, пожалуйста!
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.12.2019, 10:58
Ответы с готовыми решениями:

Последний элемент при чтении из файла построчно всегда 0, почему ?
Здравствуйте, подскажите, почему при чтении из файла у меня все время 0 является последним...

При любом значении размера массива, всегда N-12 элемент будет равен NaN
В цикле происходит заполнение массива из файла. Каким-то образом выходит, что при любом значении...

Максимальный размер массива, vector, set, map
Как можно узнать максимальный размер массива, vector, set, map, стеков, очередей. Это зависит от...

Размер вектора всегда равен нулю
void f (char a, vector &lt;int&gt;ch) { for (int i=0; (a-'0')&lt;10 &amp;&amp; (a-'0'&gt;=0) ; i++) // { ...

3
858 / 447 / 112
Регистрация: 06.07.2013
Сообщений: 1,494
02.12.2019, 11:23 2
Есть один вариант, ты вставляешь в set одинаковые адреса
1
фрилансер
4158 / 3562 / 793
Регистрация: 11.10.2019
Сообщений: 9,594
02.12.2019, 11:39 3
Эникей, случайно не вызываешь delete для элементов Variables снаружи smallsh_declare ? Тогдп новые new вполне могут такой же адрес возвращать

Или у тебя вовсе Variables локальная?

Я бы с указателями не парился

C++
1
std::set <std::string> Variables;
Добавлено через 1 минуту
а вот и ответ:

C++
1
s = args[1];
1
3652 / 2989 / 828
Регистрация: 25.03.2012
Сообщений: 11,022
Записей в блоге: 1
02.12.2019, 11:46 4
Лучший ответ Сообщение было отмечено Эникей как решение

Решение

Цитата Сообщение от Эникей Посмотреть сообщение
char * s = new char [1024];
    s = args[1];
в чём тайный смысл, сначала показывать указателем на выделенную память, а поттом полностью её забыть и потерять, перенаправив указатель на память args[1] ???
Мне кажется, ты хотел этого
C++
1
2
3
char * s = new char [1+strlen(args[1]) ];
strcpy(s, args[1]);
Variables.insert(s);
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.12.2019, 11:46
Помогаю со студенческими работами здесь

Файл настроек сохраняется всегда только на диск С какую бы папку я не выбирал для него
Здравствуйте ! Возникла проблема что файл настроек сохраняется всегда только на диск С какую бы...

Как из map выбрать последний элемент?
Как из map выбрать последний елемент? map.end()-1 некатит

Последний элемент массива всегда заменяется нулём
Товарищи, ну прям оказия. Весь вечер не могу ошибку отловить. Имеется таблица JTable mainTable =...

Не получается вывести и удалить последний элемент контейнера map
Не получается вывести и удалить последний элемент контейнера map. Для первого (begin) всё...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru