Alvin Seville
335 / 267 / 132
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 9
1

Почему целых две секунды выполняется программа?

03.03.2019, 17:45. Показов 1947. Ответов 15
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <stdexcept>
#include <vector>
#include <string>
 
using namespace std;
 
int main(int argc, char** argv)
{
    vector<int>* x;
    for (int i = 1; i < 11; i++)
        x->push_back(i);
    delete x;
    return 0;
}
Почему целых две секунды выполняется программа? И почему отображается:
Process exited after 2.409 seconds with return value 3221225477
? Почему 3221225477, а не 0?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.03.2019, 17:45
Ответы с готовыми решениями:

Задание на операторы цикла (подскажите, почему не выполняется программа)
Рассмотрим некоторое натуральное n (n &gt; 1). Если оно четно, то разделим его на 2, иначе умножим на...

Не пойму, как сделать подсчет и почему программа не выполняется полностью
Задание - из исходного файла с информацией вывести на экран название и суммарную стоимость для...

Почему эта программа в многопоточном режиме выдаёт за гуды не гуды, а так же стопорится каждые 2 секунды?
Никак не могу понять. Весь проект: http://rghost.ru/54345553 unit Unit6; interface uses

Как сделать паузу в программе на две секунды?
Как сделать паузу в программе на две секунды?

15
16088 / 8688 / 2122
Регистрация: 30.01.2014
Сообщений: 14,975
03.03.2019, 17:49 2
Лучший ответ Сообщение было отмечено Соколиный глаз как решение

Решение

Соколиный глаз, У вас объект по указателю х отсутствует. Программа в состоянии UB, может быть все что угодно.
1
"C with Classes"
1581 / 1360 / 511
Регистрация: 16.08.2014
Сообщений: 5,647
Записей в блоге: 1
03.03.2019, 17:49 3
Цитата Сообщение от Соколиный глаз Посмотреть сообщение
vector<int>* x;
указатель не рабочий
C++
1
vector<int>* x = new vector<int>{};
1
Alvin Seville
335 / 267 / 132
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 9
03.03.2019, 17:50  [ТС] 4
DrOffset, да, точно, вечно с ними путаюсь.
0
16088 / 8688 / 2122
Регистрация: 30.01.2014
Сообщений: 14,975
03.03.2019, 17:50 5
Соколиный глаз,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <stdexcept>
#include <vector>
#include <string>
 
using namespace std;
 
int main(int argc, char** argv)
{
    vector<int> x;
    for (int i = 1; i < 11; i++)
        x.push_back(i);
 
    return 0;
}
1
Мозгоправ
1737 / 1031 / 468
Регистрация: 01.10.2018
Сообщений: 2,138
Записей в блоге: 2
03.03.2019, 17:51 6
Измените:
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include <vector>
 
using namespace std;
 
int main()
{
    vector<int> x;
    for (int i = 1; i < 11; i++)
        x.push_back(i);
    return 0;
}
1
Alvin Seville
335 / 267 / 132
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 9
03.03.2019, 17:53  [ТС] 7
Ещё вопрос. Как передать нулевой указатель в функцию линейного поиска:
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
#include <iostream>
#include <stdexcept>
#include <vector>
#include <string>
 
using namespace std;
 
const string INVALID_ARGUMENT_STRING = "áûë NULL";
 
template<typename T>
bool linear_seach(vector<T>* container, T target)
{
    if (!container)
        throw invalid_argument("container" + INVALID_ARGUMENT_STRING);
    
    int i = 0;
    while (i < container->size() && target != container->at(i))
        i++;
    return i < container->size();
}
 
int main(int argc, char** argv)
{
    vector<int>* x = new vector<int>{};
    for (int i = 1; i < 11; i++)
        x->push_back(i);
    cout << linear_seach(x, 4) << endl;
    delete x;
    return 0;
}
? NULL не принимает.
0
16088 / 8688 / 2122
Регистрация: 30.01.2014
Сообщений: 14,975
03.03.2019, 17:55 8
Цитата Сообщение от Соколиный глаз Посмотреть сообщение
вечно с ними путаюсь.
Выкрутите на максимум в вашей IDE предупреждения. Хотя бы об использовании неинициализированного указателя должен быть warning.

Цитата Сообщение от Соколиный глаз Посмотреть сообщение
NULL не принимает.
В каком месте он здесь нужен?
0
Alvin Seville
335 / 267 / 132
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 9
03.03.2019, 17:56  [ТС] 9
DrOffset, хочу чтобы прога упала от моего исключения. Поэтому NULL хочу.

Добавлено через 26 секунд
Цитата Сообщение от DrOffset Посмотреть сообщение
Выкрутите на максимум в вашей IDE предупреждения.
Как? У меня DevC++.
0
"C with Classes"
1581 / 1360 / 511
Регистрация: 16.08.2014
Сообщений: 5,647
Записей в блоге: 1
03.03.2019, 17:57 10
Цитата Сообщение от Соколиный глаз Посмотреть сообщение
? NULL не принимает.
конечно
Цитата Сообщение от Соколиный глаз Посмотреть сообщение
if (!container)
* * * * throw invalid_argument("container" + INVALID_ARGUMENT_STRING)
0
Мозгоправ
1737 / 1031 / 468
Регистрация: 01.10.2018
Сообщений: 2,138
Записей в блоге: 2
03.03.2019, 17:58 11
Цитата Сообщение от Соколиный глаз Посмотреть сообщение
хочу чтобы прога упала от моего исключения
Разделите что-нибудь целое на 0
0
16088 / 8688 / 2122
Регистрация: 30.01.2014
Сообщений: 14,975
03.03.2019, 18:00 12
Цитата Сообщение от Соколиный глаз Посмотреть сообщение
Как передать нулевой указатель в функцию
Достаточно просто 0 передать. NULL - это макрос, подключите <cstdlib>

А вообще ваш код решает проблему, которой нет.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
template<typename T>
bool linear_seach(vector<T> const & container, T target)
{
    size_t i = 0;
    while (i < container.size() && target != container[i])
        i++;
    return i < container.size();
}
 
int main(int argc, char** argv)
{
    vector<int> x;
    for (int i = 1; i < 11; i++)
        x.push_back(i);
    cout << linear_seach(x, 4) << endl;
 
    return 0;
}
0
"C with Classes"
1581 / 1360 / 511
Регистрация: 16.08.2014
Сообщений: 5,647
Записей в блоге: 1
03.03.2019, 18:00 13
Цитата Сообщение от Соколиный глаз Посмотреть сообщение
хочу чтобы прога упала от моего исключения. Поэтому NULL хочу.
так упадет
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
#include <iostream>
#include <stdexcept>
#include <vector>
#include <string>
 
using namespace std;
 
const string INVALID_ARGUMENT_STRING = "áûë NULL";
 
template<typename T>
bool linear_seach(vector<T>* container, T target)
{
    if (!container)
        throw invalid_argument("container" + INVALID_ARGUMENT_STRING);
    
    int i = 0;
    while (i < container->size() && target != container->at(i))
        i++;
    return i < container->size();
}
 
int main(int argc, char** argv)
{
    vector<int>* x = nullptr;
    cout << linear_seach(x, 4) << endl;
    return 0;
}
0
Alvin Seville
335 / 267 / 132
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 9
03.03.2019, 18:04  [ТС] 14
Хм, и что я тупил:
C++
1
vector<int>* x = NULL;
...

Добавлено через 56 секунд
P.S. Я отправил своё сообщение, только после - увидел твоё...

Добавлено через 1 минуту
Мне не нравится то, что я пишу:
C++
1
hrow invalid_argument("container" + INVALID_ARGUMENT_STRING);
Можно сделать как нибудь примерно так (аналог nameof()):
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
42
43
44
using System;
using System.Collections.Generic;
 
namespace LinearSeach
{
    /// <summary>
    /// Содержит методы расширения для Enumerable.
    /// </summary>
    public static class EnumerableExtensions
    {
        private const string ArgumentNullExceptionString = "{0} было равно null";
 
        /// <summary>
        /// Выполняет поиск указанного элемента в коллекции.
        /// </summary>
        /// <typeparam name="T">Тип элемента.</typeparam>
        /// <param name="collection">Коллекция.</param>
        /// <param name="target">Искомый элемент.</param>
        /// <param name="equalityComparer">Компаратор.</param>
        /// <returns>True, если искомый элемент присутствует в коллекции, иначе False.</returns>
        public static bool Find<T>(this IEnumerable<T> collection, T target, IEqualityComparer<T> equalityComparer)
        {
            if (collection == null)
                throw new ArgumentNullException(string.Format(ArgumentNullExceptionString, nameof(collection)));
 
            if (equalityComparer == null)
                throw new ArgumentNullException(string.Format(ArgumentNullExceptionString, nameof(equalityComparer)));
 
            foreach (var item in collection)
                if (equalityComparer.Equals(target, item))
                    return true;
            return false;
        }
 
        /// <summary>
        /// Выполняет поиск указанного элемента в коллекции.
        /// </summary>
        /// <typeparam name="T">Тип элемента.</typeparam>
        /// <param name="collection">Коллекция.</param>
        /// <param name="target">Искомый элемент.</param>
        /// <returns>True, если искомый элемент присутствует в коллекции, иначе False</returns>
        public static bool Find<T>(this IEnumerable<T> collection, T target) => collection.Find(target, EqualityComparer<T>.Default);
    }
}
?
0
16088 / 8688 / 2122
Регистрация: 30.01.2014
Сообщений: 14,975
03.03.2019, 18:18 15
Цитата Сообщение от Соколиный глаз Посмотреть сообщение
Как? У меня DevC++.
Почему целых две секунды выполняется программа?
1
16088 / 8688 / 2122
Регистрация: 30.01.2014
Сообщений: 14,975
03.03.2019, 18:38 16
Лучший ответ Сообщение было отмечено Соколиный глаз как решение

Решение

Цитата Сообщение от Соколиный глаз Посмотреть сообщение
аналог nameof()
Встроенных средств, кроме typeid(*container).name() - нет.

Добавлено через 11 минут
A, я кажись немного не о том подумал. Наверное в вашем случае можно так:
C++
1
2
3
4
5
6
#define nameof(name) #name
 
//.................
 
 
throw invalid_argument(nameof(container) + INVALID_ARGUMENT_STRING)
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.03.2019, 18:38
Помогаю со студенческими работами здесь

Какой код спрячет изображение через две секунды
Имеется окно приложения. Необходимо, чтобы при запуске приложение высвечивалось изображение, и...

Оптимизация PHP кода,есть скрипт который обрабатывает текст,аналоги работают за секунды,мой выполняется шесть минут
Скрипт:нужно узнать какая из букв в тексте расположена первее всех,и вывести её номер в этом...

Вероятность того, что за две секунды на АТС поступит менее двух вызовов
Среднее число вызовов, поступающих на АТС в минуту, равно 120. Какова вероятность того, что за две...

Как сложить две временные отметки в виде дни часы: минуты: секунды
Здравствуйте! Подскажите пожалуйста, как сложить две временные отметки в виде дни часы: минуты:...


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

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

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