Calloc dėl Keil Kompiliatorius

P

Pad

Guest
Labas,

Bet kas gali padėti man šią programą žemiau ...

change it to int *Ary;)

Ši programa gavo kai kurių Keil Kompiliatorius įspėjimo bet VC Compiler jis veikia (bet LC XDATA * arai,
pakeisti jį int * arai;)Įspėjimas Ekranas:

Įspėjimas: Modulio pavadinimas nėra unikalus
Module: C: \ Keil \ C51 \ lib \ C51s.LIB (CALLOC)

Įspėjimas: Dell Išorės Muzikiniai
Simbolis: _CALLOC
Modulis: calloc.obj (CALLOC)

Įspėjimas: nuoroda į neišspręstos Išorės
Simbolis: _CALLOC
Modulis: calloc.obj (CALLOC)

Kodas

# include <stdlib.h>

# include <stdio.h>

# include "reg52.h"tuščia tst_calloc (const int dydis)

(

LC XDATA * arai;

int s = 2, n = 3;Arai = calloc (dydis, sizeof (* arai));if (! arais)

(

return;

)ARY = n;/ / Free (arais);

)void main (void)

(

while (1)

(

tst_calloc (100);

))
 
Jūsų kodas atrodo gerai.Aš bandė surinkti, ir viskas buvo OK.Tik du įspėjimus L16 "Nepareikalautas segmentas, nepaisoma perdangos procesas".
Vienintelis dalykas, kurį aš nesuprantu, kodėl ne "calloc (dydis, sizeof (int))".

PS Griežtai tariant "Jei (arais == NULL)" būtų geriau, jei atsižvelgti į C specifikacija, NULL, kur galima ką nors (nulinė vertė yra tik dažniausias atvejis).

Pps: sorry for mistyping

 
Labas,

Calloc (dydis, sizeof (int)) ir calloc (dydis, sizeof (* arai)) abu yra teisingi, tačiau sizeof (* arais) yra geriau, nes jei tu kada nors pakeisti arai iš int * į didesnius ar mažesnius produkto tipą, pvz dvigubas *, tuomet sizeof (* arai), vis tiek bus teisinga.

Taigi, ar turite idėją, kaip ignoruoti ĮSPĖJIMAS?Prašom parodyti man savo kodą ..

Ar galite paaiškinti, kas tai yra nemokama (arais);?Kokiais atvejais mes turime daryti, kad ...

Kas yra PGS?

Ačiū.

 
Labas,

Priežastis, kodėl "calloc (dydis, sizeof (* arai))" yra protingas.Aš niekada galvoti apie galimybę padaryti kažką panašaus inside my code.Maybe I don't trust mano C kompiliatorių, kiek jūs.Turiu išmokti ir praktikuoti daugiau ...

>> Prašau parodyti man savo kodą ..
Aš tik kopija įterpti savo kodą į uVision.Jis posible kaupti - Reklama - debug.Dviejų segmentų nepaisoma perdangos procesas gali būti ignoruoti.Aš nežinau, kodėl jūs toks ne ignorable įspėjimai.Jūsų C51S.LIB intacted?Gal galite tiesiogiai įterpti CALLOC.C į savo projektą (žr. C51 \ lib) ir jis bus išspręsti jūsų problemas.

>> Ar galėtumėte paaiškinti, kas tai yra nemokama (arais)
Tai paprasta.Jei skirti tam atminties Heap (malloc, calloc, ...) reikia grįžti atgal, kai willl nenaudoti it anymore.Jei ne, tai laisvos atminties bus išnaudota per labai trumpą laiką, nes kiekvieną skambutį į tst_calloc () bus paskirti nauji cca 200 baitų, kurie bus prarasti, jei procesorius apdailos tst_calloc () funkcijos (arais tik vietos žymeklis viduje tst_calloc () ir taigi bus "sunaikintas" viršuje tst_calloc pabaigos ()).
Už integruotą programinę įrangą šio kodo - be free () - yra blogai, bet labai dažnos praktikos, nes jei programa bus baigtas visas skirta atmintis yra grąžinamas sistemai automatiškai OS pati.Įterptųjų pasaulis programa niekada nėra baigtas, todėl manau, kiek XRAM yra jūsų MCU ir jūs žinosite, kiek kartų tst_calloc () bus vykdomas taip, kaip tikėtasi.

>> Kas yra PGS?
Nothing special.Aš norėjau Post Post Scriptum, kaip pataisyti PS, kur aš darau kai spausdinimo klaida.Bet Bulletin board system HID nekoreguotas pranešimą, kad ši pastaba yra manekeno, kaip ir aš.

 

Welcome to EDABoard.com

Sponsor

Back
Top