calloc na Keil

P

Pomoc

Guest
Nazdar,

Každý, kto mi môže pomôcť v tomto programe pod ...

change it to int *Ary;)

Tento program má niekoľko varovania na Keil, ale na VC Compiler to funguje (ale int * xdata Ary,
zmeniť na int * Ary;)Výstraha Displej:

Upozornenie: Modul neníjedinečný
Module: C: \ Keil \ C51 \ lib \ C51s.LIB (calloc)

Upozornenie: unresolved external symbol
Symbol: _CALLOC
Modul: calloc.obj (calloc)

Upozornenie: odkazuje na externé Strava
Symbol: _CALLOC
Modul: calloc.obj (calloc)

Kód:

# Include <stdlib.h>

# Include <stdio.h>

# Include "reg52.h"void tst_calloc (const int size)

(

int xdata * Ary;

int s = 2, n = 3;Ary = calloc (size, sizeof (* Ary));if (! Ary)

(

return;

)Ary = n;/ / Free (Ary);

)void main (void)

(

while (1)

(

tst_calloc (100);

))
 
Váš kód sa zdá byť dobrý.Snažil som sa skompilovať a všetko bolo OK.Iba dve varovania L16 "nevyžiadaných segment, neberie do úvahy pre prekrytie procesu".
Jediná vec, ktorej nerozumiem je, prečo nie "calloc (veľkosť, sizeof (int))".

PS: Prísne vzaté "if (Ary == NULL)" by bolo lepšie, keby si vziať do úvahy špecifikácie C, NULL, kde môže byť čokoľvek (nulová hodnota je len najčastejší prípad).

PPS: Sorry for preklepov

 
Nazdar,

Calloc (size, sizeof (int)) a calloc (size, sizeof (* Ary)), oba sú správne, ale sizeof (* Ary) je lepšie, pretože ak ste niekedy zmeniť Ary z int * do väčšej či menšej typ, ako je double *, potom sizeof (* Ary) bude aj naďalej za správne.

Tak čo, máš nejaký nápad, ako ignorovať varovania?Ukážte mi prosím svoj kód ..

Môžete mi prosím vysvetliť, čo je to voľný (Ary);?V akej situácii sa musíme dať, že ...

Čo je to PPS?

Vďaka.

 
Nazdar,

Váš dôvod, prečo "calloc (veľkosť, sizeof (* Ary))" je šikovný.Nikdy som premýšľal o možnosti urobiť niečo takého vnútri môjho kódu.Možno Neverím má C kompilátora rovnako ako vy.Musím sa učiť a precvičovať viac ...

>> Ukážte mi prosím svoj kód ..
Mám len kopírovať vložiť kód do uVision.Bolo posible zostaviť - odkaz - debug.Dva segmenty, neberie do úvahy pre prekrytie proces môže byť bezpečne ignorovať.Neviem, prečo máte takéto non-ignorable varovania.Je vaša C51S.LIB intacted?Možno by ste mohli priamo CALLOC.C vložiť do projektu (pozri C51 \ LIB), a to bude riešiť vaše problémy.

>> Môžete mi prosím vysvetliť, čo je to voľný (Ary)
Je to jednoduché.Keď prideliť časť pamäte z haldy (malloc, calloc, ...), musíte sa vrátiť späť, ak nie je okrem odšťavovača budete často používať ešte.Ak nie, voľnej pamäte vyčerpaný za veľmi krátku dobu, pretože každý volanie tst_calloc () vyčlenených cca 200 nových bytov, ktoré budú stratené, ak procesor dokončí tst_calloc () funkcia (Ary je len miestny ukazovateľ vnútornej tst_calloc () a tak to bude "zničený" na konci tst_calloc ()).
Mimo zabudovaný softvér tento kód - bez free () - nie je zlé, ale veľmi bežnej praxi, pretože keď program skončil všetky svoje pridelené pamäti, sa vracia do systému automaticky OS sám.Embedded vo svete je program nikdy dokončená, takže myslím, koľko je na vašej XRAM MCU a budete vedieť, koľkokrát tst_calloc () budú vykonané podľa očakávania.

>> Čo je to PPS?
Nič zvláštneho.Mal som na mysli Post Post Scriptum ako oprava PS, kde som urobiť nejaký preklep.Ale nástenke systému schoval nenapravené správe, táto poznámka je rovnako falošné ako ja.

 
Zmena vyhlásenie

calloc (veľkosť, (int), sizeof (* Ary))

 

Welcome to EDABoard.com

Sponsor

Back
Top