Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
68 / 68 / 11
Регистрация: 28.12.2012
Сообщений: 471
1

Мусор и оператор new

18.09.2014, 17:19. Показов 1255. Ответов 17
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Создаю глобальный указатель на структуру, инициализирую некоторые поля после выделения оператором new.
Вызываю функцию (callback) создающую диалоговое окно, пытаюсь заполнить оставшиеся поля. При выходе из нее значения действительные, но при повторном входе в эту функцию там мусор. Что это может быть?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.09.2014, 17:19
Ответы с готовыми решениями:

Написать программу, содержащую оператор оператор for для счета от 2 до 5 через 1
В С++ я ноль, помогите пожалуйста написать прогу Написать программу, содержащую оператор...

Условный оператор, оператор ввода/вывода; плоскость и принадлежность точки
Здравствуйте. В С++ я абсолютный новичок, поэтому с первым же заданием возникли определённые...

Для шаблонного класса перегрузить оператор присваивания, copy-конструктор, объекты cin и cout, оператор *
Помогите в следующем: Для класса шаблона следует перегрузить оператор присваивания, конструктор...

Для чего нужен оператор двоеточие, если два двоеточия - это оператор расширения области видимости
для чего нужен оператор двоеточие ( : ), если два двоеточия( :: ) - это оператор расширения области...

17
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
18.09.2014, 17:24 2
Может быть что угодно. Нужно код смотреть.
0
 Аватар для worldown
189 / 177 / 111
Регистрация: 22.06.2009
Сообщений: 533
18.09.2014, 17:24 3
прогугли "static" может поможет
0
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
18.09.2014, 17:33 4
Цитата Сообщение от SEGNET Посмотреть сообщение
Что это может быть?
копирование...например
1
68 / 68 / 11
Регистрация: 28.12.2012
Сообщений: 471
18.09.2014, 17:42  [ТС] 5
Кода много. Те поля которые были иниц. значениями - не изменились, а оставшиеся мусор. Бред какой-то.
0
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
18.09.2014, 17:43 6
Цитата Сообщение от SEGNET Посмотреть сообщение
Вызываю функцию (callback) создающую диалоговое окно, пытаюсь заполнить оставшиеся поля. При выходе из нее значения действительные, но при повторном входе в эту функцию там мусор
Вы хотя бы ее покажите
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
18.09.2014, 17:54 7
Покажи структуру, как ты выделяешь под неё память и как изменяешь её поля.
0
68 / 68 / 11
Регистрация: 28.12.2012
Сообщений: 471
18.09.2014, 18:01  [ТС] 8
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
    mystruct *pFSP;
 
BOOL CALLBACK DlgSetParam(HWND hDlg, UINT iMsg, WPARAM wParam, LPARAM lParam)
{
    char tempbuf[50] = { 0 };
    switch (iMsg)
    {
    case WM_INITDIALOG:
        // Выводим данные структуры 
        //pFSP = new mystruct[xxx]
 
        _itoa_s(pFSP[iIdItem].iSecTake, tempbuf, 10);
        SetWindowText(GetDlgItem(hDlg, IDC_EDIT1), tempbuf);
        ZeroMemory(tempbuf, sizeof(tempbuf));
        _itoa_s(pFSP[iIdItem].iSecBusy, tempbuf, 10);
        SetWindowText(GetDlgItem(hDlg, IDC_EDIT2), tempbuf);
        ZeroMemory(tempbuf, sizeof(tempbuf));
        _itoa_s(pFSP[iIdItem].iSecNotAvail, tempbuf, 10);
        SetWindowText(GetDlgItem(hDlg, IDC_EDIT3), tempbuf);
        ZeroMemory(tempbuf, sizeof(tempbuf));
        return TRUE;
 
    case WM_COMMAND:
        switch (wParam)
        {
        case IDOK:
            /* Получаем данные и заносим в структуру */
            GetWindowText(GetDlgItem(hDlg, IDC_EDIT1), tempbuf, sizeof(tempbuf));
            ZeroMemory(tempbuf, sizeof(tempbuf));
            GetWindowText(GetDlgItem(hDlg, IDC_EDIT2), tempbuf, sizeof(tempbuf));
            ZeroMemory(tempbuf, sizeof(tempbuf));
            GetWindowText(GetDlgItem(hDlg, IDC_EDIT3), tempbuf, sizeof(tempbuf));
 
        case IDCANCEL:
            EndDialog(hDlg, 0);
            return TRUE;
        }
        break;
    }
    return FALSE;
}
При первом входе, все поля нули, после окей должны вносится данные... При повторном вхождении в полях мусор.
Пробовал вносить значения на прямую тоже самое. До этого использовал просто структуры было все норм.
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
18.09.2014, 18:05 9
Лучший ответ Сообщение было отмечено SEGNET как решение

Решение

В каком месте выделяется память под массив структур?
0
68 / 68 / 11
Регистрация: 28.12.2012
Сообщений: 471
18.09.2014, 20:39  [ТС] 10
Цитата Сообщение от castaway Посмотреть сообщение
В каком месте выделяется память под массив структур?
В функций обработки сообщений (WndProc). В определенном мною сообщений. Вход производится один раз после создания окон. Примерно так.
C++
1
2
3
4
5
6
7
8
    if (fopen_s(&hfile, "listphone.txt", "r")) {
            MessageBox(0, "Ошибка файла listphone.txt", 0, 0);
            return 0;
        }
            for (int i = 0; fgets(tempbuf, sizeof(tempbuf), hfile);CountPhone++) {  }
            fseek(hfile,NULL,SEEK_SET);
            pFSP = new mystruct[CountPhone];
            if (pFSP == 0) MessageBoxA(0,"Ошибка выделения памяти",0,0);
Добавлено через 43 минуты
Мое сообщение конфликтовало с другими и поэтому память выделялась несколько раз. Спасибо всем отписавшимся.
0
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
19.09.2014, 09:35 11
Цитата Сообщение от SEGNET Посмотреть сообщение
C++
1
2
3
for (int i = 0; fgets(tempbuf, sizeof(tempbuf), hfile);CountPhone++) 
{
 }
пустой for О_О
0
19409 / 10028 / 2443
Регистрация: 30.01.2014
Сообщений: 17,678
19.09.2014, 09:51 12
Цитата Сообщение от aLarman Посмотреть сообщение
пустой for О_О
Ну фактически он не пустой, там каждую итерацию выполняется fgets(tempbuf, sizeof(tempbuf), hfile).
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
19.09.2014, 10:27 13
Цитата Сообщение от DrOffset Посмотреть сообщение
там каждую итерацию выполняется fgets(tempbuf, sizeof(tempbuf), hfile).
и инкремент CountPhone
Вообще, конечно любопытный цикл, что в каждой его секции несвязанные переменные.
0
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
19.09.2014, 10:40 14
DrOffset, точно...
Цитата Сообщение от SEGNET Посмотреть сообщение
C++
1
2
pFSP = new mystruct[CountPhone]; 
if (pFSP == 0) MessageBoxA(0,"Ошибка выделения памяти",0,0);
да че уж там проверять то?) исключение будет если не выделится память). Если Вам хочется так то

C++
1
2
pFSP = new(std::nothrow) mystruct[CountPhone]; 
if (pFSP == 0) MessageBoxA(0,"Ошибка выделения памяти",0,0);
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
19.09.2014, 10:45 15
Цитата Сообщение от aLarman Посмотреть сообщение
исключение будет если не выделится память)
если используется стандартная либа, собранная без поддержки исключений (а такие бывают), то можно и без placement версии new (если я не ошибаюсь).
0
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
19.09.2014, 10:49 16
Цитата Сообщение от Tulosba Посмотреть сообщение
без placement версии new
а это разве placement?

Добавлено через 1 минуту

Не по теме:

Цитата Сообщение от Tulosba Посмотреть сообщение
собранная без поддержки исключений
судя по тому, что приложение c WinApi я думаю TC вряд ли, пытался пересобирать стандартные либы :)

0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
19.09.2014, 11:01 17
Цитата Сообщение от aLarman Посмотреть сообщение
TC вряд ли, пытался пересобирать стандартные либы
а это и не требуется, просто она уже может идти в комплекте.

Цитата Сообщение от aLarman Посмотреть сообщение
а это разве placement?
18.6.1.1/5
C++
1
void* operator new(std::size_t size, const std::nothrow_t&) noexcept;
Effects: Same as above, except that it is called by a placement version of a new-expression when a C++
program prefers a null pointer result as an error indication, instead of a bad_alloc exception.
5.3.4/11
The new-placement syntax is used to supply additional arguments to an allocation function. If used, overload resolution is performed on a function call created by assembling an argument list consisting of the amount of space requested (the first argument) and the expressions in the new-placement part of the new-expression (the second and succeeding arguments). The first of these arguments has type std::size_t and the remaining arguments have the corresponding types of the expressions in the new-placement.
0
aLarman
19.09.2014, 11:15     Мусор и оператор new
  #18

Не по теме:

Tulosba, схоронил :)

0
19.09.2014, 11:15
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.09.2014, 11:15
Помогаю со студенческими работами здесь

Мусор и вирусы на виртуалке == мусор и вирусы на пк?
Здравствуйте. Скажите пожалуйста - на сколько фактически изолированы виртуалки (в частности VMWare)...

При попытке добавить оператор else, появляется оператор "Ожидался оператор"
Здравствуйте, помогите пожалуйста. У меня есть программа, которая решает квадратные уравнения. Но...

Зачем нужен оператор while (именно while, а не do-while), когда есть оператор for?
Четкий и понятный ответ в литературе и на других web ресурсах не найден, поэтому вопрос к знатокам:...

Условный оператор и оператор выбора. Даны два угла треугольника. Определить, существует ли такой треугольник
Даны два угла треугольника (в градусах). Определить, существует ли такой треугольник, и если да, то...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
Rust или Go? А может C++?
hw_wired 28.01.2025
С каждой новой технологией или методологией появляются новые языки программирования, призванные решать конкретные задачи либо улучшать аспекты производительности и безопасности. Среди множества. . .
Fortran и WinAPI: как создать приложение с графическим интерфейсом
hw_wired 28.01.2025
Fortran — это один из старейших высокоуровневых языков программирования, широко используемый в науке и инженерии уже несколько десятилетий. Его название происходит от "Formula Translation" (перевод. . .
Списки в Haskell
hw_wired 28.01.2025
Haskell является функциональным языком программирования, который отличается лаконичностью синтаксиса и мощными абстракциями. Важным концептом в Haskell являются списки — упорядоченные коллекции. . .
Функции высшего порядка в Haskell
hw_wired 28.01.2025
Haskell – это современный функциональный язык программирования, который получил широкое распространение благодаря своей выразительности и мощным абстракциям. Одной из ключевых особенностей Haskell. . .
Как в цикле обойти все поля объекта в JavaScript
bytestream 28.01.2025
Объекты в JavaScript представляют собой фундаментальные структуры данных, которые позволяют хранить и организовывать связанную информацию в виде пар ключ-значение. Каждый объект можно представить как. . .
Как выбрать строки в DataFrame по значению столбца в Pandas
bytestream 28.01.2025
В области анализа данных библиотека Pandas стала незаменимым инструментом для работы с табличными данными в Python. Эта мощная библиотека предоставляет множество функций для эффективной обработки и. . .
Как сделать перенос строки в Bash
bytestream 28.01.2025
При работе с командной оболочкой Bash разработчики часто сталкиваются с необходимостью форматирования текстового вывода, где ключевую роль играет правильное управление переносами строк. Умение. . .
Поиск подстроки в строке с помощью Bash
bytestream 28.01.2025
Поиск подстроки в строке является одной из важных задач в программировании и обработке текстов. Применение такого поиска можно найти в самых разных областях, от анализа данных до разработки. . .
[golang] 169. Majority Element
alhaos 28.01.2025
Тут надо вернуть "мажористый" элемент который встречается в слайсе больше чем в половине случаев. По условиям задачи во входных данных такой элемент обязан присутствовать. / / . . .
Когда лучше использовать LinkedList вместо ArrayList в Java
bytestream 28.01.2025
При разработке Java-приложений выбор правильной структуры данных играет ключевую роль в обеспечении эффективности и производительности программы. ArrayList и LinkedList являются двумя. . .
Какой ответ HTTP лучше использовать: 403 Forbidden или 401 Unauthorized, когда недостаточно прав
bytestream 28.01.2025
В современной веб-разработке правильная обработка ошибок и точное информирование клиентов о статусе их запросов играют критическую роль в создании надежных и безопасных приложений. Особое внимание. . .
Как получить список всех файлов коммита в Git
bytestream 28.01.2025
Система контроля версий Git представляет собой мощный инструмент для управления изменениями в программном коде и других файлах проекта. В основе работы Git лежит концепция коммитов - снимков. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru