Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Visual C++. Проблема с глобальным массивом. 
:(
    Опции темы
spleaner
Дата 5.6.2007, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Добрый день!
Мучаюсь с небольшой (но довольно срочной:( ) проблемой..

Имею проект test в visual C++ 8 (windows forms)
имеются, как всегда, файлы test.h и test.cpp .

в test.cpp находятся несколькой функций, глобальных переменыых и (!) нужный мне глобальный массив..
объявляю его (до написания всех функций и до #include "test.h") так:
Код

int abc[1024]

пробывал и так:
Код

int* abc = new int[1024];


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

for (k=0;k<=1023;k++) 
        abc[k]=0;

ничего не происходит:(
В нем как были, так и остаются "левые" значения... (типа 11191934, 11191940, 0, 0, 20 и т.п.)

А мне нужно, чтобы была возможность изменять его и из test.cpp и из test.h (ну и считывать, разумеется)

Подскажите пожалуйтся, как его правильно объявить и как правильно к нему обращаться :(

Это сообщение отредактировал(а) spleaner - 5.6.2007, 12:51
PM   Вверх
zkv
Дата 5.6.2007, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: 16
Всего: 92



честно говоря, не очень понял, что тебе нужно, может это: 
в одном (и только одном) из cpp файлов определяем массив глобально (те вне тел функций):
Код

int abc[1024];

затем в других файлах, где хотим увидеть этот массив предварительно объявляем его (можно делать сколько угодно раз):
Код

extern int abc[1024];


помогло? smile
PM MAIL   Вверх
spleaner
Дата 5.6.2007, 14:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



нет :( не помогло:(
чтобы было понятней - напишу подробней..

вот код файла noti.cpp (собственно проблемы лезут отсюда)..
p.s. все лишнее - убрал.. чтобы не засорять

Код

// на это месте инклюды библиотек

// Глобальные переменные:
int abc[1024];
//int* abc = new int[1024];

// Объявления функций

BOOL                InitServer();
// ну тут еще неск. функций - не суть

BOOL InitServer()
{
    // пробывал сюда вставить extern int abc[1024]; - не помогло..
    int k;
    for (k=0;k<=1023;k++) 
        abc[k]=0;

            // тут тело самой функции - к массиву отношения не имеет..
    return TRUE;
}

#include "Form1.h"
using namespace noti;

[STAThreadAttribute]

int main(array<System::String ^> ^args)
{
    // Enabling Windows XP visual effects before any controls are created
    Application::EnableVisualStyles();
    Application::SetCompatibleTextRenderingDefault(false); 

    // Create the main window and run it
    Application::Run(gcnew Form1());
    return 0;
}


во время исполнения цикла включаю пошаговый режим и там четко видно, что элементы массива не изменятся:(
вот скрин:
user posted image

т.е. он пытается присвоить значение abc[k] , но там все равно остается "19878028" (ну в каждом элементе массива по-разному)..
PM   Вверх
zkv
Дата 5.6.2007, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: 16
Всего: 92



spleaner, так ты смотришь на значение ячейки ДО того как она обнулена, там просто мусор валяется.
Цитата(spleaner @  5.6.2007,  14:07 Найти цитируемый пост)
    for (k=0;k<=1023;k++) 

как то больше принято 
Код

for (k=0;k < 1024;k++)

глаз режет smile
PM MAIL   Вверх
spleaner
Дата 5.6.2007, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



наверно просто скриншот не удачныйsmile

вот так:
user posted image

ниодним элемент не обнулился.. 
(с 10го по 34ый элемент - нолики, т.к. он изначально такой создается.. после 34 опять фигня всякая)

PM   Вверх
Fazil6
Дата 5.6.2007, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1653
Регистрация: 3.5.2006
Где: Минск

Репутация: 3
Всего: 60



Цитата(spleaner @  5.6.2007,  14:20 Найти цитируемый пост)
ниодним элемент не обнулился.. 

у тебя случаем точки с запятой нет в строке?
Код

for (k=0;k<=1023;k++) ;


и еще нет ли объявления 
Код

int abc[1024];

в test.h ?

PM MAIL   Вверх
spleaner
Дата 5.6.2007, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Fazil6 @  5.6.2007,  14:24 Найти цитируемый пост)
у тебя случаем точки с запятой нет в строке?


нет конечноsmile
чуть выже же висит код файла..


Цитата(Fazil6 @  5.6.2007,  14:24 Найти цитируемый пост)
и еще нет ли объявления 
int abc[1024];


нету.. а даже если бы и было - я ведь смотрю watch'ем в прям времени этот цикл пощагово.. и ничего не происходит..

PM   Вверх
zkv
Дата 5.6.2007, 14:41 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: 16
Всего: 92



spleaner, если я скажу, что так не бывает, тебе это поможет? smile 
попробуй на всякий случай повыводить элементы куда нить (в файл например) чтобы убедится, что watcher не врет smile Хотя, скорее всего, что то у себя упустил ты.
PM MAIL   Вверх
spleaner
Дата 5.6.2007, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



zkv
за 3 минуты то того, как обновил страницу поступил аналогично - и не поверил watcher'у...

Сделал еще один цикл.
Забил в строку символов все значения массива (в массиве было 2,2,2,0,4,3 и дальше нули) хоть вотчер и показывал всякую фигню - в строке оказалось то, что нужно...

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

Тогда вопрос - а как же следить за массивом в пошаговом режиме?   smile 
(хотя сейчас лично мне это не актуально)

Всем совет - не верьте вотчеру  smile , проверяйте все сами...  smile 
PM   Вверх
Rapalex
Дата 5.6.2007, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 732
Регистрация: 20.1.2006
Где: Украина -> Ник олаев

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



spleaner, смотрю я на это:
Цитата(spleaner @  5.6.2007,  14:07 Найти цитируемый пост)
[STAThreadAttribute]int main(array<System::String ^> ^args)

И понимаю что ты не на сях пишеш а на C++/CLR, ты малость разделом ошибся идиты на .NET.

В шарпе есть Gaebage Collector, а что в этом ужазним си, я если честно не знаю. Может он и есть, может он тебе массив и удаляет, незнаю.

Поидее в .нет все переменные в классах должны быть обявлениы, там даже функций глобальных нет!!! да и классы все по пространствам имён раскиданы.

Да и вообще!!!! нафиг тебе глобальные переменные, во всех книгах написано что так делать НЕ желательно!!!



--------------------
In vitium ducit culpae fuga.
Желание избежать ошибки вовлекает в другую.
(Horatius)
PM ICQ   Вверх
spleaner
Дата 5.6.2007, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Rapalex

если честно, я сам не фанат Си++, уже давно пишу на #..  Но с преподами по "Визуальным системам программирования" не поспоришь..
Вот и приходится мучатся..

Не задумывался на тему что принято и что нет, делаю для того, чтобы отвзались.. 

Но столкнувшись с такой проблемой был удивлен и решил разузнать что да как.. 

Всем спасибо за помощьsmile
PM   Вверх
SenkraD
Дата 5.6.2007, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 4
Всего: 23



[offtop]
spleaner,  программа использующая .NET Framework гараздо медленее любой проги на С++ с использованием MFC или иной GUI библиотеки по определению. И если ты пишеш на C# то мог бы и этот массив в класс запихнуть бы это было бы более правильно, да и более привычно для тебя
[/offtop]


--------------------
 Имеющий язык - да не убоится спросить! 
user posted image
PM MAIL ICQ   Вверх
Rapalex
Дата 5.6.2007, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 732
Регистрация: 20.1.2006
Где: Украина -> Ник олаев

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



Цитата(SenkraD @  5.6.2007,  15:13 Найти цитируемый пост)
 мог бы и этот массив в класс запихнуть

Согласен на все 100.

Цитата(spleaner @  5.6.2007,  15:02 Найти цитируемый пост)
Но с преподами по "Визуальным системам программирования" не поспоришь..

Что ты такое сказал!!! Разница между тем си на котором ты пишеш и шапом - СИНТАКСИС.
Всёравно получается сборка а не экзешник, и без фреймворка не потянет.
Всёравно что кнопки да/нет/отмена заменить пофиг/нефиг/нафиг, и сказать что это что этоновая ось.  smile 


--------------------
In vitium ducit culpae fuga.
Желание избежать ошибки вовлекает в другую.
(Horatius)
PM ICQ   Вверх
nerezus
  Дата 5.6.2007, 17:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


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

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



Цитата

spleaner,  программа использующая .NET Framework гараздо медленее любой проги на С++ с использованием MFC или иной GUI библиотеки по определению.
 Почему "гораздо"?
Разница порядка десятка-двух процентов.


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
SenkraD
Дата 5.6.2007, 18:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 4
Всего: 23



[offtop]
nerezus,  когда мы работали со скинированиям это процент почти до половины дорос, хотя мы ускоряли как могли. Мы думали, что это мы дураки, но когда поискали по инету, то нашли кучу вопросов о том как ускорить когда работу проги когда у тебя за 100 контролов и ещё, не дай бог, скины ибо начинались такие тормоза с прорисовкой, что мама не горюй. В итоге всю визуальную часть переписали на Builder, а не визуальную (сервисы и всё в этом духе) на VC. Щас прога летает (гдето 130 кнопок со скинами, реклама - фильмы, гифки, флеш, и ещё куча скинированных контролов), ни одного подтормахивание, в то время когда на шарпе мы видели как кнопка одна за одной рисуется и, ещё раз повторю, не одни мы такой фигню наблюдали
[/offtop]

P.S. Всё завязываем эти религиозные войни в отдете WinAPI

Это сообщение отредактировал(а) SenkraD - 5.6.2007, 18:05


--------------------
 Имеющий язык - да не убоится спросить! 
user posted image
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




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


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

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