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

Ошибочки в функции - C++

Восстановить пароль Регистрация
 
gr_8_zizu
13 / 8 / 2
Регистрация: 07.01.2011
Сообщений: 149
30.07.2011, 00:38     Ошибочки в функции #1
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
bool dfs (int i1, int pArray[][],int q[])
{
bool test;
int n=10, m=12;
int d1;
   for(int d=0; d<m; d++)
   {
   if(pArray[i1][d]==1)
      {
      for(int d1=0; d1<n; d1++)
         {
         if(pArray[d1][d]==2)
            {
             if(i1==q[0]||i1==q[1]||i1==q[2]||i1==q[3]||i1==q[4]||i1==q[5])
             {
             test=true;
             break;
             }
             else
             {
             test=false;
             break;
             }
            }
         }
      }
   }
return test;
}
Ошибочки в функции
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.07.2011, 00:38     Ошибочки в функции
Посмотрите здесь:

C++ определение функции в ЗАГОЛОВОЧНОМ файле. В основном предполагается переопределение ТЕЛА этой функции. Как это сделать, не правя хидер?
C++ Функции: определить значение сложной функции
ошибочки. как разобраться?найти точки перегиба C++
C++ Не работают функции <math.h> в методе (функции-члене)
Классы. Программирование алгоритмов с использованием конструктора, деструктора, friend - функции инициализации set() и функции вывода результатов prin C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Belphanior
8 / 8 / 0
Регистрация: 10.03.2011
Сообщений: 62
30.07.2011, 01:38     Ошибочки в функции #2
Попробуйте заменить заголовок функции на
C++
1
bool dfs (int i1, int** pArray,int* q)
gr_8_zizu
13 / 8 / 2
Регистрация: 07.01.2011
Сообщений: 149
30.07.2011, 01:47  [ТС]     Ошибочки в функции #3
Belphanior, Спасибо помогло. Но я думал что моя запись и ваша полностью идиентичны ну за исключением синтаксиса!
Belphanior
8 / 8 / 0
Регистрация: 10.03.2011
Сообщений: 62
30.07.2011, 01:53     Ошибочки в функции #4
gr_8_zizu, не могу сказать ничего конкретного на этот счет) Но вместо того, чтобы передавать целый массив в качестве параметра уж лучше передать указатель. Что если там массив 10000 на 10000?
grizlik78
Эксперт С++
 Аватар для grizlik78
1884 / 1416 / 102
Регистрация: 29.05.2011
Сообщений: 2,961
30.07.2011, 02:30     Ошибочки в функции #5
Вообще, чтобы правильно ответить на вопрос надо бы видеть как вызывается функция и как объявлены массивы.

Цитата Сообщение от Belphanior Посмотреть сообщение
Но вместо того, чтобы передавать целый массив в качестве параметра уж лучше передать указатель.
Ну, массив и не будет передаваться. По-крайней мере int q[]. Запись же int pArray[][] просто не верна: хотя бы для первого измерения размер должен быть задан.

Цитата Сообщение от gr_8_zizu Посмотреть сообщение
Belphanior, Спасибо помогло. Но я думал что моя запись и ваша полностью идиентичны ну за исключением синтаксиса!
Нет, не идентичны. int q[] отличается от int* q почти так же, как статический (автоматический) массив отличается от указателя.

Но если с предложенным описанием параметров функции всё работает, то наверное действительно нужны были указатели. Массивы динамические?
gr_8_zizu
13 / 8 / 2
Регистрация: 07.01.2011
Сообщений: 149
30.07.2011, 02:45  [ТС]     Ошибочки в функции #6
grizlik78, нет массивы статические.
grizlik78
Эксперт С++
 Аватар для grizlik78
1884 / 1416 / 102
Регистрация: 29.05.2011
Сообщений: 2,961
30.07.2011, 03:40     Ошибочки в функции #7
Тогда работать должно неправильно.
Двухмерный массив не является массивом указателей, так что его нельзя передавать через двойной указатель.

Добавлено через 9 минут
Иллюстрация:
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
#include <stdio.h>
 
int a[3][3] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
 
void test1(int b[][3])
{
    int i, j;
    printf("test1:\n");
    for (i = 0; i < 3; ++i)
        for (j = 0; j < 3; ++j)
            printf("b[%d][%d] = %d\n", i, j, b[i][j]);
}
 
void test2(int **b)
{
    int i, j;
    printf("test2:\n");
    for (i = 0; i < 3; ++i)
        for (j = 0; j < 3; ++j)
            printf("b[%d][%d] = %d\n", i, j, b[i][j]);
}
 
int main(void)
{
    test1(a);
    test2((int**)a);
    return 0;
}
При запуске имеем:
Код
$ ./a.out     
test1:
b[0][0] = 1
b[0][1] = 2
b[0][2] = 3
b[1][0] = 4
b[1][1] = 5
b[1][2] = 6
b[2][0] = 7
b[2][1] = 8
b[2][2] = 9
test2:
zsh: segmentation fault  ./a.out
Про первое измерение я погорячился. Как раз для него не обязательно размер указывать.

Добавлено через 29 минут
А вот когда я говорил про отличия int q[] от int* q я был неправ, так как в голове держал двухмерные массивы. Для одномерных эти формы записи, по-моему, всё-таки эквивалентны.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.07.2011, 12:57     Ошибочки в функции
Еще ссылки по теме:

Применение переменных одной функции в другой функции C++
C++ Работа функции qsort - объяснить работу функции
Разница в работе созданной функции и основной функции C++

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

Или воспользуйтесь поиском по форуму:
gr_8_zizu
13 / 8 / 2
Регистрация: 07.01.2011
Сообщений: 149
30.07.2011, 12:57  [ТС]     Ошибочки в функции #8
Может быть не по теме, но всетаки спрошу. эту функцию я использую для того что бы переходить по графу вниз. так вот эту функцию нужно вызывать для каждой вершины матрицы. мб кто нить знает как ето лучше сделать.
Yandex
Объявления
30.07.2011, 12:57     Ошибочки в функции
Ответ Создать тему
Опции темы

Текущее время: 09:35. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru