Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
marni
2 / 2 / 0
Регистрация: 17.04.2013
Сообщений: 68
#1

Странная ошыбка - C++

03.10.2013, 17:55. Просмотров 439. Ответов 16
Метки нет (Все метки)

Всём привет
Есть такая проблема: при использовании
C++ (Qt)
1
qsort(&c, c.size(), sizeof(int), compare)
Кидает ексепшен, почёму понять не могу. Вот весь код:
Кликните здесь для просмотра всего текста
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <vector>
 
int compare(const void* a, const void* b)
{
    return ( *(int*) a - *(int*)b );
}
 
int main()
{
    std::vector<int> c(3);
    c.push_back(45);
    c.push_back(4);
    c.push_back(75);
    c.push_back(7654);
 
    qsort(&c, c.size(), sizeof(int), compare);
    return 0;
}


И ёще одно там почемуто размер вэктора равен не 4 а 7, может через это?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.10.2013, 17:55     Странная ошыбка
Посмотрите здесь:

Ошыбка - C++
Исправте ошыбку пжалуйста: у=(a*sqrt(а*x)+a*exp(x))/(b*sin(x+3.14/16)); 14 F:\main1.cpp stray '\243' in program ...

Ошыбка с функциями - C++
Подскажыте в чем ошыбка??? Делаю без функции, все норм!!! #include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;math.h&gt; void vvod(); ...

не пойму што за ошыбка - C++
// Praktichne_1,2.cpp : Defines the entry point for the console application. // #include &quot;stdafx.h&quot; #include&lt;iostream&gt; ...

Ошыбка - error C2664 - C++
Тренируюсь по видео уроку писать игрушку волейбол и возникла ошибка - error C2664: 'glutSpecialFunc' : cannot convert parameter 1 from...

Посмотрите где ошыбка?? - C++
#include&lt;cstdio&gt; #include&lt;cstdlib&gt; #include&lt;string&gt; using namespace std; int main(){ FILE* f = fopen(&quot;file.txt&quot;,&quot;r&quot;); ...

Пронумерировать стек. Ошыбка в стеке - C++
Никак не пойму почему програма ничево не выводит на функции renumber,после while.:wall: #include &lt;stdio.h&gt; #define MAX_LEN 100 ...

скажите пожалуйста где моя ошыбка... - C++
Даны вещественные числа a,b,c,d,e,f.Переменноый S присвоить значение 1, если оба уравнения ах2 + bх + с = 0 и dx2 + ex + f = 0.для...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
03.10.2013, 18:09     Странная ошыбка #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <vector>
 
int compare(const void* a, const void* b)
{
    return ( *(int*) a - *(int*)b );
}
 
int main()
{
    std::vector<int> c(3);
    c.push_back(45);
    c.push_back(4);
    c.push_back(75);
    c.push_back(7654);
 
    qsort(&c[0], c.size(), sizeof(int), compare);
    return 0;
}
MrGluck
Модератор
Эксперт CЭксперт С++
6992 / 4163 / 594
Регистрация: 29.11.2010
Сообщений: 11,045
03.10.2013, 18:18     Странная ошыбка #3
marni, не к чему STL скрещивать с С.
для сортировки есть отличная функция std::sort которая пользуется итераторами std::begin и std::end, которые вектор специально предоставляет.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <vector>
#include <algorithm>
 
int main()
{
    std::vector<int> c(3);
    c.push_back(45);
    c.push_back(4);
    c.push_back(75);
    c.push_back(7654);
 
    sort(c.begin(), c.end());
    // обычный вывод вектора на экран, можете вставить свой
    for (auto &x: c)
        std::cout << x << " ";
    return 0;
}
рекомендую почитать это:
http://www.cplusplus.com/reference/algorithm/
marni
2 / 2 / 0
Регистрация: 17.04.2013
Сообщений: 68
03.10.2013, 18:30  [ТС]     Странная ошыбка #4
Цитата Сообщение от MrGluck Посмотреть сообщение
не к чему STL скрещивать с С.
Так я и не скрещиваю, в С бистрая сортировка идет через std::qsort а в С++ просто через qsort. sort не идёт так как нужно через qsort
GetVariable
163 / 119 / 5
Регистрация: 17.03.2013
Сообщений: 283
03.10.2013, 18:32     Странная ошыбка #5
"C" не имеет расширение пространства имён std.
MrGluck
Модератор
Эксперт CЭксперт С++
6992 / 4163 / 594
Регистрация: 29.11.2010
Сообщений: 11,045
03.10.2013, 18:33     Странная ошыбка #6
Цитата Сообщение от marni Посмотреть сообщение
в С бистрая сортировка идет через std::qsort а в С++ просто через qsort
Наверное вы хотели сказать наоборот, т.к. пространство имен имеется в С++, а в С отсутствует.
Да, С++ для капабилити имеет qsort, но это пережиток и на 100% если дело имеется с контейнерами STL.

Цитата Сообщение от marni Посмотреть сообщение
sort не идёт так как нужно через qsort
В задании говорится всенепременно извращаясь использовать функцию qsort из языка С над вектором?
И qsort и std::sort используют быструю сортировку Хоара, вот только второе заточено под STL
marni
2 / 2 / 0
Регистрация: 17.04.2013
Сообщений: 68
03.10.2013, 18:52  [ТС]     Странная ошыбка #7
Цитата Сообщение от MrGluck Посмотреть сообщение
И qsort и std::sort используют быструю сортировку Хоара, вот только второе заточено под STL
Пасиб, а как у сорта с перфоменсом? И такой вопрос, не в тему:
C++ (Qt)
1
2
 std::vector с(4) 
с.push_back(65)
вектор имеет следуещие свойства:
Кликните здесь для просмотра всего текста
c { size=5 } std::vector<int,std::allocator<int> >
[size] 5 int
[capacity] 6 int
[0] 0 int
[1] 0 int
[2] 0 int
[3] 0 int
[4] 65 int

Почему [0] 0 int
[1] 0 int
[2] 0 int
[3] 0 int
когда должно бить
[0] 65 int
[1] 0 int
[2] 0 int
[3] 0 int
Croessmah
Модератор
Эксперт CЭксперт С++
12980 / 7292 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
03.10.2013, 18:55     Странная ошыбка #8
Цитата Сообщение от marni Посмотреть сообщение
когда должно бить
С чего вдруг?
Создали 4 элемента, потом добавили пятый!

Не по теме:

Цитата Сообщение от marni Посмотреть сообщение
Странная ошыбка
действительно странная

MrGluck
Модератор
Эксперт CЭксперт С++
6992 / 4163 / 594
Регистрация: 29.11.2010
Сообщений: 11,045
03.10.2013, 19:00     Странная ошыбка #9
Цитата Сообщение от marni Посмотреть сообщение
Пасиб, а как у сорта с перфоменсом?
N*log2(N), но в среднем получается линейная.
Цитата Сообщение от marni Посмотреть сообщение
Почему [0] 0 int
[1] 0 int
[2] 0 int
[3] 0 int
когда должно бить
[0] 65 int
[1] 0 int
[2] 0 int
[3] 0 int
Должно быть 0 0 0 0 65
Вы вставляете в конец вектора.
Давайте объясню по шагам:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <vector>
 
int main()
{
    std::vector<int> c(4); // здесь вы объявляете вектор типа int размером в 4 элемента, по-умолчанию они равны 0
    //std::cout << c.capacity();
    c.push_back(65); // здесь вы вставляете в конец вектора новый элемент, его размер увеличивается, выделяется дополнительная память под контейнер
    //std::cout << c.capacity();
    // вывод вектора на экран даст нам результат 0 0 0 0 65
    for (auto &x: c)
        std::cout << x << " ";
}
marni
2 / 2 / 0
Регистрация: 17.04.2013
Сообщений: 68
03.10.2013, 19:05  [ТС]     Странная ошыбка #10
Цитата Сообщение от Croessmah Посмотреть сообщение
Не по теме:
Прошу извенить за ошЫбку то как не очень владею руским, но соглашусь нелепая ошыбка
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
03.10.2013, 19:11     Странная ошыбка #11
marni, что молчите о моём коде (2 пост)? Не работает что-ли?
marni
2 / 2 / 0
Регистрация: 17.04.2013
Сообщений: 68
03.10.2013, 19:50  [ТС]     Странная ошыбка #12
Цитата Сообщение от alsav22 Посмотреть сообщение
marni, что молчите о моём коде (2 пост)? Не работает что-ли?
Пробывал, дает ран-тайм ошибку, почему не могу понять
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
03.10.2013, 20:01     Странная ошыбка #13
Цитата Сообщение от marni Посмотреть сообщение
Пробывал, дает ран-тайм ошибку, почему не могу понять
Код из второго поста? Ничего не путаете? В таком случае, покажите скрин среды с этим кодом и ошибку, которую он выдаёт.
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
03.10.2013, 20:06     Странная ошыбка #14
Вот он же, с добавленным выводом вектора. Никих ошибок не наблюдается.
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 <vector>
 
int compare(const void* a, const void* b)
{
    return ( *(int*) a - *(int*)b );
}
 
int main()
{
    std::vector<int> c(3);
    c.push_back(45);
    c.push_back(4);
    c.push_back(75);
    c.push_back(7654);
 
    for (int i = 0; i < c.size(); ++i)
        std::cout << c[i] << ' ';
    std::cout << std::endl;
 
    qsort(&c[0], c.size(), sizeof(int), compare);
 
    for (int i = 0; i < c.size(); ++i)
        std::cout << c[i] << ' ';
    std::cout << std::endl;
    return 0;
}
Миниатюры
Странная ошыбка  
marni
2 / 2 / 0
Регистрация: 17.04.2013
Сообщений: 68
03.10.2013, 20:32  [ТС]     Странная ошыбка #15
Цитата Сообщение от alsav22 Посмотреть сообщение
Никих ошибок не наблюдается
Да у меня тож работает, я когда переписывал чють по сваэму сделал:
я написал
C++ (Qt)
1
qsort(&c, c.size(), sizeof(int), compare);
а надо било
C++ (Qt)
1
qsort(&c[0], c.size(), sizeof(int), compare);
но по подсказке было видно что надо передать просто вектор. вот так то.
и он переполнял стек
Миниатюры
Странная ошыбка  
Croessmah
Модератор
Эксперт CЭксперт С++
12980 / 7292 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
03.10.2013, 20:40     Странная ошыбка #16
Цитата Сообщение от marni Посмотреть сообщение
и он переполнял стек
Где?

Добавлено через 26 секунд
Цитата Сообщение от marni Посмотреть сообщение
но по подсказке было видно что надо передать просто вектор
по какой подсказке?

Добавлено через 33 секунды
Цитата Сообщение от marni Посмотреть сообщение
я написал
а теперь трижды подумайте что Вы сделали
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.10.2013, 20:48     Странная ошыбка
Еще ссылки по теме:

Ошыбка File1.cpp(29): E2467 'main()' cannot return a value - C++
#include&lt;stdio.h&gt; #include&lt;conio.h&gt; #include&lt;math.h&gt; #define pi 3.14159 //Прототип функцій: float BitshPoverhnja (float rc,...

Тип char ошыбка в обьявлении исправте хто может - C++
Всем здрасте! :) А почему когда я пишу так при обьявлении типа char: char name={f,r,a,n,c,a,null}; Компилятор выдает...

Не могу понять в чем ошыбка [C++ Error] SKLAD.cpp(32): E2313 Constant expression required - C++
Не могу найти ошибку SKLAD.cpp(32): E2313 Constant expression required точнее понять из-а чего она и как ее исправить #include...

Ошыбка C2334: непредвиденные лексемы перед "{"; пропуск вероятного тела функции - C++
Не могу понять где ошыбка и как ее исправить . Друзья, помогите пожалуйста 1&gt;------ Построение начато: проект: ConsoleApplication2,...

Странная функция - C++
Здравствуйте. Кто-нибудь сталкивался с такой функцией. Yi известно....


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

Или воспользуйтесь поиском по форуму:
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
03.10.2013, 20:48     Странная ошыбка #17
Цитата Сообщение от marni Посмотреть сообщение
но по подсказке было видно что надо передать просто вектор. вот так то.
По какой-такой подсказке? qsort() ничего не знает о векторах. Передаётся указатель (адрес) первого объеткта массива для обработки, а не адрес объекта вектор.

Добавлено через 6 минут
Адрес объекта класса и адрес данных, с которыми связан этот объект - не одно и тоже.
Yandex
Объявления
03.10.2013, 20:48     Странная ошыбка
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru