Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с указателем. 
V
    Опции темы
Enelar
Дата 4.4.2008, 16:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 141
Регистрация: 13.1.2008

Репутация: нет
Всего: 1



Код

/* Berezin Kirill Home 03.04.08 */

#include <conio.h>
#include <stdlib.h>
#include <stdio.h>

typedef unsigned char BYTE;
typedef unsigned int WORD;
typedef unsigned long DWORD;

typedef struct
{
  BYTE VS;     /* Start speed of body */
  BYTE MS;     /* Masse       of body */
  BYTE XS;     /* Start Xposition of body */
  double V;    /* Speed     in second */
  double X;    /* Xposition in second */
  WORD X0;     /* X   plus   position */
  double K;    /* Value of strench    */
  double Y;    /* Yposition in second */
} MY;
typedef struct
{
  BYTE Pos;        /* Current Position in dialog */
  BYTE MaxPos;     /* Max position in dialog */
  BYTE *Mas[3];    /* Massive of pointers */
} DIALOG;

 /*********************************************************\
<                Global Start Function                      >
 \*********************************************************/
double mainError( double Error )
{
  if (Error != 0)
  {
    printf("  Error in Get point to struct! (Error %2.3f)\n", Error);
    return Error;
  }
  return;
}

void main( void )
{
  DIALOG D;
  MY M;
  double Error = 0;

  if ((D.Mas[0] = &M.MS) == NULL)
    Error = mainError(1);
  if ((D.Mas[1] = &M.VS) == NULL)
    Error = mainError(2);
  if ((D.Mas[2] = &M.XS) == NULL)
    Error = mainError(3);
  if (++(*D.Mas[0]) != M.MS)
    Error = mainError(1.1);
  if (++(*D.Mas[1]) != M.XS)
    Error = mainError(2.1);
  if (++(*D.Mas[2]) != M.XS)
    Error = mainError(3.1);
  /* Check on error and in-error close program */
  if (Error != -1)
    return;
  printf ("Get pointer... Complited\n");

  /* Start Dialog Program */
  Start(&D);
  /* Set Field Graph */
  Load();

}

Вылает только ошибку 2.1. И че?  smile 
Нет. Я понимаю дал бы 1.1, 2.1, 3.1. Или 2.0 и 2.1.
Но выдается ошибка только 2.1....

Это сообщение отредактировал(а) Enelar - 4.4.2008, 16:21
PM MAIL   Вверх
archimed7592
Дата 4.4.2008, 16:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 6
Всего: 93



Цитата(Enelar @  4.4.2008,  16:18 Найти цитируемый пост)
И че?  smile  

У тебя спросить надо...


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
Enelar
Дата 4.4.2008, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 141
Регистрация: 13.1.2008

Репутация: нет
Всего: 1



Вопрос почему так и как исправить.
PM MAIL   Вверх
Alek86
Дата 4.4.2008, 16:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: нет
Всего: 25



Цитата(Enelar @  4.4.2008,  16:18 Найти цитируемый пост)

Вылает только ошибку 2.1. И че? 
Нет. Я понимаю дал бы 1.1, 2.1, 3.1. Или 2.0 и 2.1.
Но выдается ошибка только 2.1....

что это за числа такие интересные?


--------------------
user posted image    user posted image
PM MAIL   Вверх
Enelar
Дата 4.4.2008, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 141
Регистрация: 13.1.2008

Репутация: нет
Всего: 1



Посмотри код. Поймешь.
PM MAIL   Вверх
Alek86
Дата 4.4.2008, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: нет
Всего: 25



Цитата(Enelar @  4.4.2008,  16:37 Найти цитируемый пост)
Посмотри код. Поймешь.

ух, посмотрел.
терь ночью кошмары сниться будут... smile

мож, кто-то и поможет (хотя навряд)
а если хочешь повысить шансы, перефразируй вопрос и поубирай все лишнее из кода


--------------------
user posted image    user posted image
PM MAIL   Вверх
Enelar
Дата 4.4.2008, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 141
Регистрация: 13.1.2008

Репутация: нет
Всего: 1



Ну на самом деле. Ошибки
1.0, 2.0, 3.0 - выходят если указатель получил нулевой адрес.
1.1, 2.1, 3.1 - если указатель получен не верно ( просто значение ячейки указателя изменяем на ед и сравниваем с переменной).

У нас 3 указателя.
Вот я понимаю ошибки
1.0, 2.0, 3.0, 1.1, 2.1, 3.1 - это все указатели тупо получили NULL.
1.1, 2.1, 3.1 - это тупо все получили неправельный адрес
2.0, 2.1 - это понятно тоже.

Но выскакивает только 2.1!!!!
3 совершенно едентичные операции. А ошибка именно во второй... smile 
PM MAIL   Вверх
archimed7592
Дата 4.4.2008, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 6
Всего: 93



Цитата(Enelar @  4.4.2008,  16:22 Найти цитируемый пост)
Вопрос почему так и как исправить. 

Классическая проблема j = 5; i = (j++) + (++j);

Полагаться на порядок вычисления аргументов нельзя, ибо он(порядок) не специфицирован.

Добавлено через 4 минуты и 1 секунду
Enelar, вообще говоря, смешно выглядит... Ты явно определяешь на стеке переменную, и при присваивании указателей на неё проверяешь не равны ли они NULL. Они могут быть равны NULL, либо если компилятор решил объект не создавать, либо решил не делать присваивание - т.е., иначе говоря, проверяшь "действительно программа которой ты компилируешь - нормальный компилятор"... откуда такое недоверие? smile 
А с другой стороны ты всецело и полностью доверяешься компилятору в порядке вычисления выражения... Контраст какой-то.


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
korian
Дата 4.4.2008, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 651
Регистрация: 8.3.2008
Где: Украина, Харьков

Репутация: 2
Всего: 17



[censored 6] нафига так код писать, пока понял что происходит, сошел с ума.
у вас там undefined behavior
это тоже самое что написать
(++i == i) - результат этого выражения undefined behavior
читайте про точки следования...


Это сообщение отредактировал(а) korian - 4.4.2008, 16:51
PM   Вверх
archimed7592
Дата 4.4.2008, 16:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 6
Всего: 93



Цитата(Enelar @  4.4.2008,  16:37 Найти цитируемый пост)
Посмотри код. Поймешь. 

На будущее: лучше комментировать код(хотя бы перед постингом на форум), объясняя что происходит, ибо мало кто захочет разбираться в запутанном коде, чтобы помочь.


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
Enelar
Дата 4.4.2008, 16:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 141
Регистрация: 13.1.2008

Репутация: нет
Всего: 1



Мммм.... Спасибо...
 ! 
archimed7592
Не забываем пользоваться кнопкой "вопрос решён" или соответствующей галочкой в форме ответа.


Это сообщение отредактировал(а) archimed7592 - 4.4.2008, 20:12
PM MAIL   Вверх
opjox
Дата 4.4.2008, 20:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 90
Регистрация: 17.1.2008

Репутация: 2
Всего: 14



Также в коде, похоже, опечатка: 

(D.Mas[0] = &M.MS)  ==>  ++(*D.Mas[0]) != M.MS)
(D.Mas[1] = &M.VS)   ==>  ++(*D.Mas[1]) != M.XS)

PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0854 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.