Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / указатель на указатель / 25 сообщений из 27, страница 1 из 2
23.01.2007, 19:35
    #34276601
указатель на указатель
есть код:
Код: plaintext
long long **fhcb = const_cast <long long **> (pWorkingDevice->frequencyHistoryCycleBuff.get(size1, size2));
почему-то значение fhcb - нормальное, а fhcb[0] - 0x0. Постоянно при любом раскладе. Он ведь должен указывать на одномерный массив вроде...
...
Рейтинг: 0 / 0
23.01.2007, 23:45
    #34276870
man_555
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
указатель на указатель
если не секрет, что означает long long?
...
Рейтинг: 0 / 0
24.01.2007, 00:06
    #34276891
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
указатель на указатель
че-то не поймуесть код:
Код: plaintext
long long **fhcb = const_cast <long long **> (pWorkingDevice->frequencyHistoryCycleBuff.get(size1, size2));
почему-то значение fhcb - нормальное, а fhcb[0] - 0x0. Постоянно при любом раскладе. Он ведь должен указывать на одномерный массив вроде...
Вообще-то, доступ к нулевому элементу массива через **имя, будет (*fhcb)[0] или *(*fhcb).

И вообще, код очень криво выглядит. Указатель на указатель используется обычно только при работе с возвращаеметром параметром внутри функции. Ты уверен что там **?

man_555если не секрет, что означает long long?
long long - целое вдвое длиннее чем long.
...
Рейтинг: 0 / 0
24.01.2007, 09:55
    #34277341
blinded
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
указатель на указатель
White Owl че-то не поймуесть код:
Код: plaintext
long long **fhcb = const_cast <long long **> (pWorkingDevice->frequencyHistoryCycleBuff.get(size1, size2));
почему-то значение fhcb - нормальное, а fhcb[0] - 0x0. Постоянно при любом раскладе. Он ведь должен указывать на одномерный массив вроде...
Вообще-то, доступ к нулевому элементу массива через **имя, будет (*fhcb)[0] или *(*fhcb).
White Owl
ага и в этом случае сразу схватишь 11 сигнал и core dump

И вообще, код очень криво выглядит. Указатель на указатель используется обычно только при работе с возвращаеметром параметром внутри функции. Ты уверен что там **?

ну по всей видимости там все-таки ** причем const, а вот зачем const снимать и ковряться в матрице грязными руками - большой вопрос

White Owl
man_555если не секрет, что означает long long?
long long - целое вдвое длиннее чем long.
ну не факт, поскольку стандарт не дает никаких гарантий кроме как sizeof(char) = 1
и sizeof(char)<=sizeof(short)<=sizeof(int)<=sizeof(long)<=sizeof(long long)
...
Рейтинг: 0 / 0
24.01.2007, 09:58
    #34277359
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
указатель на указатель
White Owllong long - целое вдвое длиннее чем long.

Это, наверное, там где инт 2 байта. (long 4, long long 8)

gcc 3 - long - 6, long long - 8.
...
Рейтинг: 0 / 0
24.01.2007, 10:03
    #34277379
Zmeishe
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
указатель на указатель
Akh White Owllong long - целое вдвое длиннее чем long.

Это, наверное, там где инт 2 байта. (long 4, long long 8)

gcc 3 - long - 6, long long - 8.

Не всегда.
в некоторых системах long это int32, а long long это int64
...
Рейтинг: 0 / 0
24.01.2007, 10:03
    #34277381
Zmeishe
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
указатель на указатель
т.е. long там тоже, что просто int
...
Рейтинг: 0 / 0
24.01.2007, 10:04
    #34277385
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
указатель на указатель
Zmeishe Akh White Owllong long - целое вдвое длиннее чем long.

Это, наверное, там где инт 2 байта. (long 4, long long 8)

gcc 3 - long - 6, long long - 8.

Не всегда.
в некоторых системах long это int32, а long long это int64

Ну и?
...
Рейтинг: 0 / 0
24.01.2007, 10:07
    #34277403
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
указатель на указатель
Zmeisheт.е. long там тоже, что просто int

Вполне возможно.
...
Рейтинг: 0 / 0
24.01.2007, 10:14
    #34277436
man_555
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
указатель на указатель
В MSVC 2005 sizeof(long) == 4, а sizeof(long long) == 8, причём sizeof(long) == sizeof(int)
...
Рейтинг: 0 / 0
24.01.2007, 10:24
    #34277475
Zmeishe
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
указатель на указатель
В C++Builder на Win32
и в Qt на SuSe 10.1
также.
...
Рейтинг: 0 / 0
24.01.2007, 10:31
    #34277506
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
указатель на указатель
Zmeisheи в Qt на SuSe 10.1
также.

Не в qt, а в gcc на сусе. А какая там версия?
...
Рейтинг: 0 / 0
24.01.2007, 10:38
    #34277539
blinded
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
указатель на указатель
А вот у больших дядек SUN, AIX, HP int-4, long-8, long long 8
...
Рейтинг: 0 / 0
24.01.2007, 10:47
    #34277579
Zmeishe
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
указатель на указатель
AkhНе в qt, а в gcc на сусе. А какая там версия?
linux-15:/ # gcc -v
Using built-in specs.
Target: i586-suse-linux
Configured with: ../configure --enable-threads=posix --prefix=/usr --with-local-prefix=/usr/local --infodir=/usr/share/info --mandir=/usr/share/man --libdir=/usr/lib --libexecdir=/usr/lib --enable-languages=c,c++,objc,fortran,java,ada --enable-checking=release --with-gxx-include-dir=/usr/include/c++/4.1.0 --enable-ssp --disable-libssp --enable-java-awt=gtk --enable-gtk-cairo --disable-libjava-multilib --with-slibdir=/lib --with-system-zlib --enable-shared --enable-__cxa_atexit --enable-libstdcxx-allocator=new --without-system-libunwind --with-cpu=generic --host=i586-suse-linux
Thread model: posix
gcc version 4.1.0 (SUSE Linux)
...
Рейтинг: 0 / 0
24.01.2007, 10:55
    #34277637
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
указатель на указатель
Zmeishegcc version 4.1.0 (SUSE Linux)

Оба на!
...
Рейтинг: 0 / 0
24.01.2007, 11:01
    #34277673
указатель на указатель
White Owl че-то не поймуесть код:
Код: plaintext
long long **fhcb = const_cast <long long **> (pWorkingDevice->frequencyHistoryCycleBuff.get(size1, size2));
почему-то значение fhcb - нормальное, а fhcb[0] - 0x0. Постоянно при любом раскладе. Он ведь должен указывать на одномерный массив вроде...
Вообще-то, доступ к нулевому элементу массива через **имя, будет (*fhcb)[0] или *(*fhcb).

И вообще, код очень криво выглядит. Указатель на указатель используется обычно только при работе с возвращаеметром параметром внутри функции. Ты уверен что там **?

man_555если не секрет, что означает long long?
long long - целое вдвое длиннее чем long.

При (*fhcb)[0] или *(*fhcb) вылетает Segmentation fault (core dumped).
Там действительно ** потому что это функция frequencyHistoryCycleBuff.get() вообще не моя и тут ниче не поделаешь. Так они возвращают матрицу. Константность тут действительно снимать не надо, уберу. Просто так увлекся решением текущей проблемы, что забил временно на константность... Так как все таки обратится к элементу [i,j] имея **fhcb?
...
Рейтинг: 0 / 0
24.01.2007, 11:07
    #34277725
указатель на указатель
че-то не пойму White Owl че-то не поймуесть код:
Код: plaintext
long long **fhcb = const_cast <long long **> (pWorkingDevice->frequencyHistoryCycleBuff.get(size1, size2));
почему-то значение fhcb - нормальное, а fhcb[0] - 0x0. Постоянно при любом раскладе. Он ведь должен указывать на одномерный массив вроде...
Вообще-то, доступ к нулевому элементу массива через **имя, будет (*fhcb)[0] или *(*fhcb).

И вообще, код очень криво выглядит. Указатель на указатель используется обычно только при работе с возвращаеметром параметром внутри функции. Ты уверен что там **?

man_555если не секрет, что означает long long?
long long - целое вдвое длиннее чем long.

При (*fhcb)[0] или *(*fhcb) вылетает Segmentation fault (core dumped).
Там действительно ** потому что это функция frequencyHistoryCycleBuff.get() вообще не моя и тут ниче не поделаешь. Так они возвращают матрицу. Константность тут действительно снимать не надо, уберу. Просто так увлекся решением текущей проблемы, что забил временно на константность... Так как все таки обратится к элементу [i,j] имея **fhcb?

Хотя вроде как сказал White Owl должно работать... (*fhcb+i)[j]...
...
Рейтинг: 0 / 0
24.01.2007, 11:18
    #34277800
Aklin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
указатель на указатель
char - 1 -128..+127
unsigned char (где-то обзывется байтом) 1, 0..255
short int - 2, -32___..+32___
unsigned short int он же word 2, 0..65536
word вообще говоря то же, что и unsiged short, но часто используют unsigned int. (см. unsigned int)
int или 2 или 4 байта сооств - то или short int или long int
unsigned int см. int
long int - 4 байта, -2млрд..+2млрд
unsigned long int 4, 0..4млрд (еще называют 4Гб)
dword - то же, что unsigned long правда иногда используют как unsigned long long
long long int - длинный long int, итого 8, от -дох/2 до +дох/2
unsigned long long int - то же, но без знака.
__int64 - то же что и long long

условно:
short int == short
long int == long
int == либо short либо long, чаще всего long

но на самом деле это все фуйня, ибо все регисты 4 байта. поэтому работа с char и short только для уменьшения памяти, занимаемой на жестком диске.

аффтопитезь: объект либо именован, либо не существует
...
Рейтинг: 0 / 0
24.01.2007, 11:23
    #34277820
man_555
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
указатель на указатель
int **a;

получить досуп можно так: *(*(a + n) + n), либо просто a[n][n] , где n - индекс

вроде, должно работать

сообщите, если неправ
...
Рейтинг: 0 / 0
24.01.2007, 11:30
    #34277863
указатель на указатель
man_555int **a;

получить досуп можно так: *(*(a + n) + n), либо просто a[n][n] , где n - индекс

вроде, должно работать

сообщите, если неправ

не работает. Но тут закрадывается мысль, что под **a в моем случае не просто двумерный массив, а какая-то хитроструктурированная хня... Так функция возвращающая этот самый указатель не моя, то я не могу знать в какой форме она возвращает данные... Ладно, всем спасибо, буду разбираться...
...
Рейтинг: 0 / 0
24.01.2007, 11:35
    #34277893
Zmeishe
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
указатель на указатель
man_555int **a;

получить досуп можно так: *(*(a + n) + n), либо просто a[n][n] , где n - индекс

вроде, должно работать

сообщите, если неправ

Я так делаю
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
int **a, *b, c;
  
 
for(i =  0 , b = *a; i < n; i++, b++)
{
  ...
   c = *b;
  ...
}

Да, и самое главное.
под int **a незабудь выделить память - для начала.
У меня подозрение, что не работает из-за того, что указатель указывает на ХЗ.
ХЗ оно и в африке ХЗ.
...
Рейтинг: 0 / 0
24.01.2007, 12:02
    #34278054
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
указатель на указатель
че-то не пойму man_555int **a;

получить досуп можно так: *(*(a + n) + n), либо просто a[n][n] , где n - индекс

вроде, должно работать

сообщите, если неправ

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

У тебя в общем случае, список одномерных массивов. Возврощаемое значение не нуль, значит этот список существует. Ты знаешь количество элементов в этом списке (или количество строк в массиве)?
Если да, то проверь все списки, на какую память они указывают.

Код: plaintext
1.
2.
for (int i= 0  ; i< _известное_количество_списков_ ; ++i)
  printf("%p\n", fhcb[i]);
...
Рейтинг: 0 / 0
24.01.2007, 12:07
    #34278088
указатель на указатель
Akh че-то не пойму man_555int **a;

получить досуп можно так: *(*(a + n) + n), либо просто a[n][n] , где n - индекс

вроде, должно работать

сообщите, если неправ

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

У тебя в общем случае, список одномерных массивов. Возврощаемое значение не нуль, значит этот список существует. Ты знаешь количество элементов в этом списке (или количество строк в массиве)?
Если да, то проверь все списки, на какую память они указывают.

Код: plaintext
1.
2.
for (int i= 0  ; i< _известное_количество_списков_ ; ++i)
  printf("%p\n", fhcb[i]);


Так и есть. Написал разработчикам - грят мы храним 2-х мерные массивы как одномерные с хитрой структурой и просто так работать с ними не получиться. Короче надо приводить к определенным типам и тогда все будет... Короче это они через жопу все сделали. Спасибо еще раз...
...
Рейтинг: 0 / 0
24.01.2007, 12:18
    #34278160
man_555
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
указатель на указатель
А чему равен sizeof(fhcb)? Минимальное значение будет равно sizeof(long long), тогда там либо ничего нет, либо вернулся нолик..смотря как трактовать :-)
...
Рейтинг: 0 / 0
24.01.2007, 12:19
    #34278168
man_555
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
указатель на указатель
че-то не пойму Akh че-то не пойму man_555int **a;

получить досуп можно так: *(*(a + n) + n), либо просто a[n][n] , где n - индекс

вроде, должно работать

сообщите, если неправ

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

У тебя в общем случае, список одномерных массивов. Возврощаемое значение не нуль, значит этот список существует. Ты знаешь количество элементов в этом списке (или количество строк в массиве)?
Если да, то проверь все списки, на какую память они указывают.

Код: plaintext
1.
2.
for (int i= 0  ; i< _известное_количество_списков_ ; ++i)
  printf("%p\n", fhcb[i]);


Так и есть. Написал разработчикам - грят мы храним 2-х мерные массивы как одномерные с хитрой структурой и просто так работать с ними не получиться. Короче надо приводить к определенным типам и тогда все будет... Короче это они через жопу все сделали. Спасибо еще раз...

бывает и такое
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / указатель на указатель / 25 сообщений из 27, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]