dev.gamez.lv Forum Index dev.gamez.lv
Latvian Game Developers Community
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups 

problēma ar new/delete un LIBCMT
Goto page 1, 2  Next
 
dev.gamez.lv Forum Index -> Programmēšana
View previous topic :: View next topic  
Author Message
snake5
Indago dalībnieks
Indago dalībnieks


Joined: 27 Jun 2007
Posts: 2590

PostPosted: Sat Nov 24, 2007 6:50 pm    Post subject: problēma ar new/delete un LIBCMT

nu man viss agrāk strādāja..
pēkšņi mēģinu nokompilēt spēli, tas izdodas, apakšā skatos:
LINK : warning LNK4098: defaultlib 'LIBCMT' conflicts with use of other libs; use /NODEFAULTLIB:library
bet nepievērsu uzmanību..
spēlējot man katrā konfigurācijā - debug/release - citādāki errori
debugā problēma ar vienu "delete"
release'ā problēma ar pavisam citu "new"

izdarīju, kā viņi prasa - to "nodefaultlib", bet tāpat nekas nestrādāja..
kas tur salinkojies nepareizi, vai kas vispār tur noticis?
_________________
"There are two choices here: "looks good" and "realism"." -- Paul Nettle
Back to top
View user's profile Visit poster's website
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Sat Nov 24, 2007 7:01 pm    Post subject:

Šāds warnings parasti rodas, ja tiek linkoti kopā divi ar dažādām C/C++ runtime bibliotēkām kompilēti objekt-faili vai arī statiskas bibliotēkas.
Tb vienam ir uzlikts, piemēram, "Multithreaded", bet otram "Multithreaded DLL". Vai arī jebkuras citas kombinācijas - piemēram debug konfigurācijas objektfails kopā ar release konfigurācijas objektfailu.
Pret to nevajag "cīnīties" ar nodefaultlib, tas tikai palielinās kļūdas iespējamību. To vajag salabot lietojot viena C/C++ runtime bibliotēkas kompilētāja settingos.

Bet tas, ka release un debug modēs rodas dažādākas kļūdas, tas liecina tikai par to, ka ar atmiņu rīkojies kautkā nepareizi. Debug modē ir daudz savādāks veids, kā new/delete/malloc/free operē ar atmiņu, tāpēc arī atšķirība. Debug modē parasti var daudz determinētāk noķert kļūdas. Release modē atmiņas menedžēšanas funkcijas veic mazāk pārbuades, tāpēc tās ir ātrākas, taču kļūdas gadījumā bieži nekas nenotiek uzreiz, bet gan pie citu funkciju izsaukumiem.
Back to top
View user's profile Send e-mail
snake5
Indago dalībnieks
Indago dalībnieks


Joined: 27 Jun 2007
Posts: 2590

PostPosted: Sat Nov 24, 2007 7:08 pm    Post subject:

bet tās kļūdas, kas man rādās kompilējot ar "release" settingiem atkal nerādās, kad kompilē uz "debug" un otrādi!
nezinu, kautkādi defaultie settingi sagrozījušies vai kas.. jo sourcei nav ne vainas, agrāk kompilēju - viss gāja! bet tagad kautkādas kļūdas tik rodas..
bet kā lai es atrodu, kur tiek 2 lib'i/obj'i ar dažādām runtime bibliotēkām linkoti klāt?

ah, un pie tam - mainot tās runtime bibliotēkas, mainās arī tās kļūdas!!!


EDIT:
ok, zem debuga vairs kļūdas nerādās... tas būtu tākā ok
bet release visu laiku kļūdains..
man kautkādas LIBCMT problēmas, vai?
_________________
"There are two choices here: "looks good" and "realism"." -- Paul Nettle
Back to top
View user's profile Visit poster's website
snake5
Indago dalībnieks
Indago dalībnieks


Joined: 27 Jun 2007
Posts: 2590

PostPosted: Sun Nov 25, 2007 4:19 pm    Post subject:

te nu ir man problēma..
es pēc funkcijas izsaukšanas noķeru exception'u, bet nezinu, kurā iekš šīs funkcijas izsauktajā funkcijā tā atrodas..
kā es tā ātri varētu sameklēt?
_________________
"There are two choices here: "looks good" and "realism"." -- Paul Nettle
Back to top
View user's profile Visit poster's website
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Sun Nov 25, 2007 4:24 pm    Post subject:

Tam nav nekāda sakara ar "problēma ar new/delete un LIBCMT".

Quote:
, kurā iekš šīs funkcijas izsauktajā funkcijā atrodas..

Kas šajā teikumā ir domāts ar vārdu "tā"? Tipa tu gribi "to" sameklēt, bet kas "tā" ir, kas jāmeklē?
Back to top
View user's profile Send e-mail
snake5
Indago dalībnieks
Indago dalībnieks


Joined: 27 Jun 2007
Posts: 2590

PostPosted: Sun Nov 25, 2007 4:37 pm    Post subject:

tam ir sakars, jo kautkur atmiņa tiek "apstrādāta" nepareizi.. nu bet ar LIBCMT tam vairs īsti nav tieša sakara..

tad nu, kautkā atradu vainīgo funkciju..
bet neatrodu nevienu problēmu..

nu <T http://paste.php.lv/6482 E> tas ir!
_________________
"There are two choices here: "looks good" and "realism"." -- Paul Nettle
Back to top
View user's profile Visit poster's website
snake5
Indago dalībnieks
Indago dalībnieks


Joined: 27 Jun 2007
Posts: 2590

PostPosted: Sun Nov 25, 2007 4:37 pm    Post subject:

tam ir sakars, jo kautkur atmiņa tiek "apstrādāta" nepareizi.. nu bet ar LIBCMT tam vairs īsti nav tieša sakara..

tad nu, kautkā atradu vainīgo funkciju..
bet neatrodu nevienu problēmu..

nu TE tas ir!

nu tagad redzu, ka problēma pazūd, nokomentējot..
ff >> _in_x1 >> _in_x2 >> _in_y1 >> _in_y2;
ff >> Boxes[thisBlock].tile.x1 >> Boxes[thisBlock].tile.x2;
ff >> Boxes[thisBlock].tile.y1 >> Boxes[thisBlock].tile.y2;
..kādu no šīm lasīšanas operācijām - kautvai 2. rindā " >> Boxes[thisBlock].tile.x1", vai 3. rindā " >> Boxes[thisBlock].tile.y2;" (par ";" - tos jāpieliek, bet runa nav par to)
kāpēc tad tā?
bet man šos 8 skaitļus nolasa 3x loopā, tātad kopā 24 reizes, kautgan ar katru jaunu reizi jauns exceptions un reižu skaitīšana atsākas!
kautkas ar steku atkal? vai vēl kkas?
_________________
"There are two choices here: "looks good" and "realism"." -- Paul Nettle
Back to top
View user's profile Visit poster's website
snake5
Indago dalībnieks
Indago dalībnieks


Joined: 27 Jun 2007
Posts: 2590

PostPosted: Sun Nov 25, 2007 7:45 pm    Post subject:

ok, salaboju, varam droši dzēst topiku, ja nav vajadzīgs!
visa problēma atmiņas izdalīšanā!
es vnk paņēmu "new[]" un dalīju atmiņu struktūrām, bet, izrādās, ka šis neizdala tam, kas struktūrās iekšā!
nu tad es ņēmu std:::::::vector un visu salaboju Smile
nice, eh?
_________________
"There are two choices here: "looks good" and "realism"." -- Paul Nettle
Back to top
View user's profile Visit poster's website
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Sun Nov 25, 2007 7:51 pm    Post subject:

snake5 wrote:
es vnk paņēmu "new[]" un dalīju atmiņu struktūrām, bet, izrādās, ka šis neizdala tam, kas struktūrās iekšā!

Slima suņa murgi.
new [] izdala atmiņu visam, kam tiek prasīts - tas pat izsauc katram masīva elementam konstruktoru.
Back to top
View user's profile Send e-mail
snake5
Indago dalībnieks
Indago dalībnieks


Joined: 27 Jun 2007
Posts: 2590

PostPosted: Sun Nov 25, 2007 8:39 pm    Post subject:

nu bet paskaties:
///
struct S
{
int a;
body b;
};
///
S* pS = new S[32];
///
kāpēc tad man pie pārāk liela skaitļa 32 vietā rāda - ... has detected an error in application, vai tml.?
bet ja es darītu šitā:
///
S** ppS = new S*[32];
ppS[0] = new S;
///
man viss strādātu labi!
_________________
"There are two choices here: "looks good" and "realism"." -- Paul Nettle
Back to top
View user's profile Visit poster's website
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Sun Nov 25, 2007 8:47 pm    Post subject:

Quote:
kāpēc tad man pie pārāk liela skaitļa 32 vietā rāda - ...

Tāpēc ka tu aiztiec atmiņu, kura tev nepienākas. Tas ir tikai ļoti normāli. C++ standartā šādā situācijā ir teikts, ka darbības rezultāts nav paredzams - tb katrs kompilētājs/OS var rīkoties pēc savas patikas un prāta šādā gadījumā. Var krašot, var arī nekrašot. std::vector lietojot rezultāts būs tieši tas pats - ja izdalīsi atmiņu tikai 32 elementiem, bet aiziksi 100-to, dabūsi vai nu krašu, vai līkus rezultātus.

Ja tu prasi 32 elementus, tad new arī izdalīs 32 elementus un ne baita vairāk. A tu iepriekš saki, ka šis kautko tur neizdalot...
Back to top
View user's profile Send e-mail
snake5
Indago dalībnieks
Indago dalībnieks


Joined: 27 Jun 2007
Posts: 2590

PostPosted: Sun Nov 25, 2007 8:49 pm    Post subject:

nē, nē, ne jau par to!
par to skaitli 32 vietā, kurš norāda, cik lielu masīvu veidot!
mani elementu "grābstīšana" pašlaik neinteresē Wink
problēma bija ar to, ka pie pārāk liela struktūras alloc'a vnk crash!
_________________
"There are two choices here: "looks good" and "realism"." -- Paul Nettle
Back to top
View user's profile Visit poster's website
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Sun Nov 25, 2007 8:57 pm    Post subject:

Krašs iespējams tikai tādā gadījumā, ja pieprasi atmiņu vairāk nekā tev tā ir brīva vai arī, ja izdalāmās klases konstruktorā kautkas krašo (šo gan viegli pārbaudīt laižot programmu debuggerī - tas parādīs, kurā precīzi vietā programmā noticis krašs).

Savādāku gadījumu, kurā krašot, nav! (izņemot stipru elektromagnētisko starojumu no kosmosa, kurš sabojā vērtības tava datora atmiņas moduļos)

std::vektors arī var krašot, ja tam prasīsi atmiņu vairāk nekā tev ir, vai arī klases konstruktors krašos.
Back to top
View user's profile Send e-mail
snake5
Indago dalībnieks
Indago dalībnieks


Joined: 27 Jun 2007
Posts: 2590

PostPosted: Sun Nov 25, 2007 9:44 pm    Post subject:

bet nu kāpēc izdalot ar
S* pS = new S[32];
kautkas nav kārtībā, bet ar
S** ppS = new S*[32];
for (int i = 0;i<32;i++)
{
ppS[i] = new S;
}
viss strādā pareizi?
man jau tākā neliekas, ka kautkāda struktūra, kurā ir 4 float'i, 2 integeri un 1 pointeris varētu aizņemt daudz vietas..
_________________
"There are two choices here: "looks good" and "realism"." -- Paul Nettle
Back to top
View user's profile Visit poster's website
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Sun Nov 25, 2007 10:11 pm    Post subject:

Šādai izdalīšanai nav ne vainas, ja vien jau iepriekš neesi sačakarējis atmiņu ar nepareiziem new/delete izsaukumiem. Tādā gadījumā visādi brīnumi var notikt.
Back to top
View user's profile Send e-mail
Display posts from previous:   
dev.gamez.lv Forum Index -> Programmēšana All times are GMT + 2 Hours
Goto page 1, 2  Next
Page 1 of 2

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group