Имам едно проблемче със "С"
48 отговора
1469 прегледа
Имам едно проблемче със "С"
Здравейте!
Аз съм доста "зелен" "програмист" и работите на са ми много ясни датова се обръщам към Вас!
Имам следния проблем - написах една доста обемна програма за лично ползване. Общо взето работи, но има един проблем - на едно и също място не иска да отваря определен файл - fopen() връща грешка. Когато намяля кога /премахна десетина cprinf();, gotoxy(); textattr();/ проблема изчезва и всичко си е нормално.
Можели проблева да е от компилатора - доста е старичак Borland C 3.1 ? Или от настройките му - сега са по подразбиране? Езика е С.
Благодаря Ви!
Аз съм доста "зелен" "програмист" и работите на са ми много ясни датова се обръщам към Вас!
Имам следния проблем - написах една доста обемна програма за лично ползване. Общо взето работи, но има един проблем - на едно и също място не иска да отваря определен файл - fopen() връща грешка. Когато намяля кога /премахна десетина cprinf();, gotoxy(); textattr();/ проблема изчезва и всичко си е нормално.
Можели проблева да е от компилатора - доста е старичак Borland C 3.1 ? Или от настройките му - сега са по подразбиране? Езика е С.
Благодаря Ви!
Re: Имам едно проблемче със "С"
Здрасти,
Това не е проблемче, а ПРОБЛЕМИЩЕ !!! (Майтап. ;-)
Сега съм на 3 ракии вече и поне мога да свърша тая работа да изтласкам постинга ти по-нагоре. Не ми се сърди, моля. ;-)
Пиркс
Това не е проблемче, а ПРОБЛЕМИЩЕ !!! (Майтап. ;-)
Сега съм на 3 ракии вече и поне мога да свърша тая работа да изтласкам постинга ти по-нагоре. Не ми се сърди, моля. ;-)
Пиркс
reshenie
LILI triabva da ti otgovori .
ti ima 8 godishen stag sys C/C++ , i osobenno sys stari compilatori, tolkoz stari 4e i tia ne pomni kak se kazvat
P.S. Lili-to ti da ne si Lili Ivanova, a?
eiiiii i tia shtom po4na s programirane da se zanimava zna4i mnooo sym ia zakysal
ti ima 8 godishen stag sys C/C++ , i osobenno sys stari compilatori, tolkoz stari 4e i tia ne pomni kak se kazvat
P.S. Lili-to ti da ne si Lili Ivanova, a?
eiiiii i tia shtom po4na s programirane da se zanimava zna4i mnooo sym ia zakysal
Re: Имам едно проблемче със "С"
Ami tezi desetina operatora koito mahash moze da razmazwat neshto w pametta.
Pregledaj gi wnimatelno i probwaj da gi mahash indiwidualno.
Kakwa tochno e greshkata?
Pregledaj gi wnimatelno i probwaj da gi mahash indiwidualno.
Kakwa tochno e greshkata?
Re: Имам едно проблемче със "С"
Borland C++ 3.1. tochno sled instalacia s defaultni nastroiki si e perfekten kakto za c taka i za c++.
tova che kato razmestvash koda i se promeniat neshtata znachi (veroiatno?) che programata ti omazva pamet koiato ne e zaela. Probvai da mestish fopen nagore v programata, ako si kasmetlia taka moje i da naluchkash kade stava omazvaneto.
НЕ МЕ ЕБЕ КАК Е ВУТЕ, АЗ ГЛЕДАМ ДА СЪМ ДОБРЕ
tova che kato razmestvash koda i se promeniat neshtata znachi (veroiatno?) che programata ti omazva pamet koiato ne e zaela. Probvai da mestish fopen nagore v programata, ako si kasmetlia taka moje i da naluchkash kade stava omazvaneto.
НЕ МЕ ЕБЕ КАК Е ВУТЕ, АЗ ГЛЕДАМ ДА СЪМ ДОБРЕ
Re: Имам едно проблемче със "С"
pusni sorsa, wuzmozhno li e cprintf() da se sprechkwa sus drugite IO funkcii?
probvali da fflushnesh stdout? kak otvarjash sus fopen? "rt", "rb"? ili samo "r", wizh setfmode()....
sushto wish i "errno" kakvo vrushta - nejasno e kakvo stava pri tebe sus tova objasnenie deto si go dal...
tirulirutatuutuu
probvali da fflushnesh stdout? kak otvarjash sus fopen? "rt", "rb"? ili samo "r", wizh setfmode()....
sushto wish i "errno" kakvo vrushta - nejasno e kakvo stava pri tebe sus tova objasnenie deto si go dal...
tirulirutatuutuu
Re: Имам едно проблемче със "С"
vseki pomaga s kvoto moje!
to verno e problemishte ako ima mnogo kod
НЕ МЕ ЕБЕ КАК Е ВУТЕ, АЗ ГЛЕДАМ ДА СЪМ ДОБРЕ
to verno e problemishte ako ima mnogo kod
НЕ МЕ ЕБЕ КАК Е ВУТЕ, АЗ ГЛЕДАМ ДА СЪМ ДОБРЕ
Re: Имам едно проблемче със "С"
Това 100% е грешка в програмата, не в компилатора. Компилатора е почти "железен". И аз навремето се борех точно със същия проблем.
Има няколко възможности:
1) най-вероятно препълваш някой статичен масив, който замазва структурата FILE с която се опитваш да работиш. Това лесно се открива по MAP-файла и адресите на променливите. Добавянето/махането на код води и до някои промени в дата-сегмента, затова ефекта бяга.
2) може да препълваш масив от стековите променливи и да замазваш FILE* указателя към файла; в дадения случай май е малко вероятно
3) може да използуваш неинициализиран поинтер, който със същия успех да маже по дата-сегмента. Това не е очевидно за откриване и иска доста опит.
4) не ми се мисли ако е четвъртото...
Спасението е да разхвърляш на много места подходящо написани ASSERT-команди. Ако не знаеш как, трябва да прочетеш някоя книжка по защитно програмиране - адски много помагат няколкот прости трика, описани там.
Друг подход е да докараш кода така, че грешката твърдо да се повтаря и с дебъгер да трасираш и следиш кога (и после кой) се маже, най-вероятно по FILE-структурата.
успех!
Има няколко възможности:
1) най-вероятно препълваш някой статичен масив, който замазва структурата FILE с която се опитваш да работиш. Това лесно се открива по MAP-файла и адресите на променливите. Добавянето/махането на код води и до някои промени в дата-сегмента, затова ефекта бяга.
2) може да препълваш масив от стековите променливи и да замазваш FILE* указателя към файла; в дадения случай май е малко вероятно
3) може да използуваш неинициализиран поинтер, който със същия успех да маже по дата-сегмента. Това не е очевидно за откриване и иска доста опит.
4) не ми се мисли ако е четвъртото...
Спасението е да разхвърляш на много места подходящо написани ASSERT-команди. Ако не знаеш как, трябва да прочетеш някоя книжка по защитно програмиране - адски много помагат няколкот прости трика, описани там.
Друг подход е да докараш кода така, че грешката твърдо да се повтаря и с дебъгер да трасираш и следиш кога (и после кой) се маже, най-вероятно по FILE-структурата.
успех!
Re: Имам едно проблемче със "С"
Zabelezi che greshkata e pri fopen - tam wse oshte njama FILE*.
Re: Имам едно проблемче със "С"
a faila sushtestvuva li izobshto tam ot kudeto se opitvash da go otvoris
Re: Имам едно проблемче със "С"
nai-weroiatno si zamazal pametta kato si pisal sled kraia na
niakoi bufer ili si izplzwal neinicializiran pointer.
moje da slojish source na fopen w projecta si i da go devugwash za da widish
kakwo tochno stawa w nego i zashto gyrmi :)
niakoi bufer ili si izplzwal neinicializiran pointer.
moje da slojish source na fopen w projecta si i da go devugwash za da widish
kakwo tochno stawa w nego i zashto gyrmi :)
Re: Имам едно проблемче със "С"
Не разчитай на грешка в компилатора. Аз никак не съм "зелен", но и аз последно се хванах на тая въдица миналата седмица. Много е удобно, но в 99.9% от случаите не е така. Основното при откриване на грешка е да намалиш до минимум кода, който предизвидва ситуацията. Това всъщност някой вече ти го каза. Махай нещата едно по едно докато става грешката. Като не остане почти нищо ще го намериш лесно. Ако е сред друг код опитай да го изнесеш в процедура и ако продължава да става всичко е наред - seek & destroy.
Re: Имам едно проблемче със "С"
oshte edin vyzmozhen problem s cprintf --> proveri si format stringa i broia na promenlivite sled tova. dali njamash njakoi %d ili drugo neshto s % v poveche.
tva syshto e vyzmozhnost da si namazhesh steka i nachin za proizvodstvo na stranni fenomeni.
8ми дан по икебана
tva syshto e vyzmozhnost da si namazhesh steka i nachin za proizvodstvo na stranni fenomeni.
8ми дан по икебана
Re: Имам едно проблемче със "С"
verno!
ili da e namazal nekoj buffer (sigurno cprintf printva wuw nekoj statichen bufer i ne proverjawa mnogo mnogo - ili wuw stekatichen bufer shi da e?)
tirulirutatuutuu
ili da e namazal nekoj buffer (sigurno cprintf printva wuw nekoj statichen bufer i ne proverjawa mnogo mnogo - ili wuw stekatichen bufer shi da e?)
tirulirutatuutuu
Re: Имам едно проблемче със "С"
smniawam se... w takyw sluchai shteshe da ima ogranichenie
za towa kolko goliam string moje da pechatish s printf...
pyk obiknoweno nuli ima mnogo wse shte se nameria niakoia da terminira stringa :))))
po-weroiatno e w cprintf ima konstantni stringowe koito kato mahne
cprintf i se promenia data segmenta i neshto wajno za fopen popada pod udarite na niakoe stcpy ili neinicializiran pointer... :))
za towa kolko goliam string moje da pechatish s printf...
pyk obiknoweno nuli ima mnogo wse shte se nameria niakoia da terminira stringa :))))
po-weroiatno e w cprintf ima konstantni stringowe koito kato mahne
cprintf i se promenia data segmenta i neshto wajno za fopen popada pod udarite na niakoe stcpy ili neinicializiran pointer... :))
Re: Имам едно проблемче със "С"
drug wariant e cprintf da setwat flaga za greshka ?
i sled towa wsichki sledwashti I/O da wryshtat greshka?
i sled towa wsichki sledwashti I/O da wryshtat greshka?
Re: Имам едно проблемче със "С"
Да, така е. Но е добре да се провери дали името на файла в тоя момент не е замазано. Освен това fopen() и цялата f..() система имат локални променливи в дата-сегмента, които могат да се замажат (всъщност тях имах предвид :) - те могат да се видят къде са в MAP-файла.
В края на крайщата fopen() алокира буфер за файла - по подразбиране 512 байта. Ако някъде е препълнил някой алокиран масив, може да се е скапало действието на malloc() (замазани alloc-chains) и пак същия ефект...
В края на крайщата fopen() алокира буфер за файла - по подразбиране 512 байта. Ако някъде е препълнил някой алокиран масив, може да се е скапало действието на malloc() (замазани alloc-chains) и пак същия ефект...
Re: Имам едно проблемче със "С"
Aide i az da kaza moieto skromno i mnogo subectovno mnenie. Pyrvo ste se opitam da othvyrlia malko veroitnite nesta. Da ne tyrsish pod vola tele :)
- Malko verioiatni prblemi
1. trite funcii sa ot consolnata biblioteka na borland i gi niama vyv C standarta no moga da te ubedia che sa OK zastoto sym gi polzaval navremeto kogato Turbo C 1.5 beshe vyrha na sladoleda.
2. fprint - e ot standartnata biblioteka i se linkva otdelno - taka che ne se mesha s consolata.
3. Problem s kompilatora - mislia che e malko veroiatno.
- Po-blizki do realnostta problemi
4. Ochevidno mazane pamet - niakyde ochevidno da izlizash izvyn ramkite na bufera - ili da se opitvash a kopirash string deto niama NULL char nakraja i tem podobni
5. Problem v tvoia proekt : V BC 3.1 imashe model na kompilatora Small, Medium, Large, Hude i ot tova zavisi kakvo ste stane sys segmentite i pointerite.
Po podrazbirane bi triabvalo da ti predlaga Large. Systo taka tam moze da kazesh iskash li prilozenito ti da raboti pod windows ili ne. Ne znam kolko e goliamo nestoto koeto si napisal no ne mi se viarva da si napulnil 1 segment sys kompiliran CODE (64k). Ako e taka znachi tribva da go razdelish poveveche .c files. Struva mi se malko veroiatno Compilatora ili linkera maj si se oplakvashe. Drugia variant da prehvyrlish steka 64k. ako imash recursia ili golemi masivi kato localni promenlivi naprimer char s[33000], s[33000]; ne e hubavo nesto. preporycva se malloc za vsicko po-goliamo ot 100 bytes.
I pak vsichki te nesta se otnasiat za Large model. Vyv SMALL model vsichki danni sa sybrani vyv edin segment. Naj-dobre si procheti helpa.
Aide sys zdrave i dano sym ti pomognal :)
- Malko verioiatni prblemi
1. trite funcii sa ot consolnata biblioteka na borland i gi niama vyv C standarta no moga da te ubedia che sa OK zastoto sym gi polzaval navremeto kogato Turbo C 1.5 beshe vyrha na sladoleda.
2. fprint - e ot standartnata biblioteka i se linkva otdelno - taka che ne se mesha s consolata.
3. Problem s kompilatora - mislia che e malko veroiatno.
- Po-blizki do realnostta problemi
4. Ochevidno mazane pamet - niakyde ochevidno da izlizash izvyn ramkite na bufera - ili da se opitvash a kopirash string deto niama NULL char nakraja i tem podobni
5. Problem v tvoia proekt : V BC 3.1 imashe model na kompilatora Small, Medium, Large, Hude i ot tova zavisi kakvo ste stane sys segmentite i pointerite.
Po podrazbirane bi triabvalo da ti predlaga Large. Systo taka tam moze da kazesh iskash li prilozenito ti da raboti pod windows ili ne. Ne znam kolko e goliamo nestoto koeto si napisal no ne mi se viarva da si napulnil 1 segment sys kompiliran CODE (64k). Ako e taka znachi tribva da go razdelish poveveche .c files. Struva mi se malko veroiatno Compilatora ili linkera maj si se oplakvashe. Drugia variant da prehvyrlish steka 64k. ako imash recursia ili golemi masivi kato localni promenlivi naprimer char s[33000], s[33000]; ne e hubavo nesto. preporycva se malloc za vsicko po-goliamo ot 100 bytes.
I pak vsichki te nesta se otnasiat za Large model. Vyv SMALL model vsichki danni sa sybrani vyv edin segment. Naj-dobre si procheti helpa.
Aide sys zdrave i dano sym ti pomognal :)