IMHO.WS

IMHO.WS (http://www.imho.ws/index.php)
-   Программирование (http://www.imho.ws/forumdisplay.php?f=40)
-   -   С++ программа работает не у всех (http://www.imho.ws/showthread.php?t=112567)

alexksei 15.12.2006 18:12

С++ программа работает не у всех
 
Вложений: 1
Вообшем программа на некоторых компах работает, на некоторых нет, не знаю что за фигня...НА ХР работает, на 2000 нет..
Вообшем не знаю почему, может это както зависит от версии винды или еще от чегото, подскажите как возможно устранить это.

Код приаттачил

vovik 15.12.2006 18:28

Может для начала не код надо приаттачивать, а написать с какими сообщениями не запускается? На что жалуется, какие ошибки выдает.
Скорее всего она обращается к библиотекам/компонентам, которых в 2000 нет или они не той версии.
Например у меня есть программа, которая требует MS Data Access Component версии 2,7 и выше. Поэтому на Win2000 без 4 сервиспака не работает

alexksei 15.12.2006 22:05

ну программа на 2000 компилируеца там все ОК, но после уже запуска программы выдается ошибка, Programm has generated errors, вообшем видосовая, без всяких подсказок к решению проблеммы...

вообшем я пробовал ствить getch() после каждой строки и в итоге выяснил что ошибка выдается на строке atoi(pos), при том что на ХР и в этой строке и во всех последующих все ок....

Willow 16.12.2006 01:39

посмотрел
ну dll нужны следующие: kernel32, msvcrt вроде как есть везде.

Запустил под 2000 из под VMWare - таки есть проблема.
Судя по SoftIce ошибка в коде startup, при вызове ___mingw_CRTStartup.
Чего оно происходит сказать сходу не могу.
Хотя если я правильно понимаю это связано с проверкой стека.
Возможно надо увеличить объем стека в директивах компилятора, или выделать память динамически а не обявлять сразу как rid[400], хотя странно это вроде не так уж и много.

Oaxa 16.12.2006 03:29

Цитата:

Willow:
msvcrt вроде как есть везде
Если мне не изменяет память, MSVCRT.DLL (Microsoft Visual C++ Run Time library) есть не везде, а устанавливается вместе с Microsoft Visual Studio (и некоторыми другими программами)

Попробуй проверить pos на NULL перед atoi.

PinGUIWin 16.12.2006 18:49

Цитата:

Willow:
Возможно надо увеличить объем стека в директивах компилятора, или выделать память динамически а не обявлять сразу как rid[400], хотя странно это вроде не так уж и много.
Можно rid[400] сделать глобальной, если заработает -- то было мало стека.

Willow 17.12.2006 00:58

Цитата:

Сообщение от Oaxa
Если мне не изменяет память, MSVCRT.DLL (Microsoft Visual C++ Run Time library) есть не везде, а устанавливается вместе с Microsoft Visual Studio (и некоторыми другими программами)

Попробуй проверить pos на NULL перед atoi.

Влюбом случае при отсутствии нужной dll винда так и говорит, а не Accsess Violation порождает, так что даже если этой длл и нету сама проблема не вэтом.

yan_kos 17.12.2006 11:18

Цитата:

Oaxa:
Попробуй проверить pos на NULL перед atoi.
Так и есть там 0
2 alexksei
Вы конечно можете писать как хотите но не советую выделять массивчики не так как Вы делаете. Я понимаю что робота с памятю геморна но всьо же мой компилятор очень "матерился" на создание стековых массивов с не константными значениями размеров
Цитата:

int i=0;
......
float massiv [i];
И ищо у Вас нету проверок на валидность результатов ф-и например тот же
Цитата:

pos=strtok(NULL,".dm_");
у меня сразу же выдал 0. Или например
Цитата:

fp=fopen(fail,"w");
Нету проверки открыт ли файл.
Вообщем советую посмотреть на стиль кодинга у хорошего знакомого программиста или поищите в Гугле статьи на эту тему.
И напоследок не пишыте так "свободно" на С++, это не скриптовый язык всьо же ;)

alexksei 17.12.2006 21:43

yan_kos, пасиба за советы, действительно моя проблемма - безалаберность :biggrin: если чтото пишу, то как попадёт, а не по правилам...буду стараться совершенствоваться ....и вопрос - как я могу создать массив с константным значением размера, если он неизвестен заранее и вообшемто может быть любым...


И всем пасиба за советы, буду пробовать, правда щас не имею доступа к Win 2000, так что проверить не могу... если у кого то есть еще какието догадки, пишите, буду благодарен ;)

yan_kos 18.12.2006 11:05

Цитата:

alexksei:
как я могу создать массив с константным значением размера, если он неизвестен заранее и вообшемто может быть любым
Для этого используйте динамический массив
<тип даных>* <переменная>=new <тип даных> <размер>;
Цитата:

float * massiv=new float [i];
В таком случае память под массив будет выделяться не в стеке а на куче
то бишь ее нужно потом будет по чистить:
Цитата:

delete massiv;
Чистку производить после того как массив будет "не нужным".

PSyton 19.12.2006 14:07

2 alexksei
Прошу прощения, но код просто жуткий.. Это не C++..
Вопрос - зачем складывать имена файлов в массив? Может сразу и удалять?

alexksei 19.12.2006 18:55

Цитата:

Сообщение от PSyton
2 alexksei
Прошу прощения, но код просто жуткий.. Это не C++..
Вопрос - зачем складывать имена файлов в массив? Может сразу и удалять?

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

PSyton 20.12.2006 06:43

Вложений: 1
Цитата:

Сообщение от alexksei
...но без массива обойтись был никак, так как стираю я не все файлы подряд,...

Без проблем. Приду вечером с работы и уделю немного времени написанию примера.
А вообще - поиск максимума/минимума делается за один проход.
---
Вот архив с маленьким примером. Совсем без массива конечно нельзя, т.к. учитываются доп критерии. Но проход все же 1. Насчет того правильно ли это работает - не проверял не на чем, да и некогда. Пример (VS2005) сделан дабы показать идею и C++.

P.S.
Перезалил - забыл 2 строки.

alexksei 21.12.2006 19:49

Цитата:

Сообщение от PSyton
Без проблем. Приду вечером с работы и уделю немного времени написанию примера.
А вообще - поиск максимума/минимума делается за один проход.
---
Вот архив с маленьким примером. Совсем без массива конечно нельзя, т.к. учитываются доп критерии. Но проход все же 1. Насчет того правильно ли это работает - не проверял не на чем, да и некогда. Пример (VS2005) сделан дабы показать идею и C++.

P.S.
Перезалил - забыл 2 строки.

Пасиба, посмотрю, изучу =) НА счет одного прохода, я знаю, просто мне пока было главное выяснить как сделать чтоб работало везде, а потом бы я подумал над остальным ;) Ведь минимум надо искать не из всех файлов, а по критериям, я бы сделал это позже..


Часовой пояс GMT +4, время: 01:35.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.