Calloc på Keil Compiler

H

Hj

Guest
Hej,

Nogen kan hjælpe mig på dette program Bellow ...

change it to int *Ary;)

Dette program fik nogle advarsel Keil Compiler, men i VC compiler det arbejde (men int xdata * Ary,
ændre den til int * Ary;)Advarsel Display:

Advarsel: Modul Navn ikke entydigt
Modul: C: \ Keil \ C51 \ LIB \ C51s.LIB (CALLOC)

Advarsel: Uløste Eksterne Symbol
Symbol: _CALLOC
Modul: calloc.obj (CALLOC)

Advarsel: henvises til Uløste Eksterne
Symbol: _CALLOC
Modul: calloc.obj (CALLOC)

Kode:

# 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 (størrelse, sizeof (* Ary));if (! Ary)

(

return;

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

)void main (void)

(

while (1)

(

tst_calloc (100);

))
 
Din kode ser ud til at være god.Jeg har forsøgt at samle den og alt er OK.Kun to advarsler L16 "malplacerede segment, ignoreret for overlay proces".
Det eneste, som jeg ikke forstår, er hvorfor ikke "calloc (størrelse, sizeof (int))".

PS: Strengt taget "if (Ary == NULL)" ville være bedre, hvis du tager hensyn til C specifikation, hvor NULL kan være noget (nul værdi er kun de mest almindelige tilfælde).

PPS: Sorry for mistyping

 
Hej,

Den calloc (størrelse, sizeof (int)) og calloc (størrelse, sizeof (* Ary)) begge er korrekte, men sizeof (* Ary) er bedre, fordi hvis du en dag ændrer Ary fra int * til en større eller mindre type som double *, så sizeof (* Ary) vil stadig være korrekte.

Så har du fået nogen idé om, hvordan man ignorerer advarslen?Kan du vise mig din kode ..

Kan du forklare, hvad er det gratis (Ary);?I hvilken situation vi er nødt til at sætte det ...

Hvad er KKS??

Tak.

 
Hej,

Din grunden "calloc (størrelse, sizeof (* Ary))" er klog.Jeg har aldrig tænkt over muligheden for at gøre noget som dette inde i min kode.Måske jeg stoler ikke på mit C compiler så meget som du gør.Jeg er nødt til at lære og praktisere mere ...

>> Kan du vise mig din kode ..
Jeg har kun kopiere indsætte koden i uVision.Det var posible at kompilere - link - debug.To segmenter ignoreret for overlay proces kan trygt ignoreres.Jeg ved ikke, hvorfor du har sådan ikke ignorere advarsler.Er din C51S.LIB intacted?Måske kunne du direkte indsætte CALLOC.C i dit projekt (se C51 \ LIB), og det vil løse dine problemer.

>> Kan du forklare, hvad er det gratis (Ary)
Det er nemt.Når du afsætte nogle hukommelse fra heap (malloc, calloc, ...), bør du aflevere den tilbage, når du willl ikke at bruge det længere.Hvis ikke, vil det frigøre hukommelse være opbrugt på meget kort tid, fordi alle opkald til tst_calloc () vil afsætte nye cca 200 byte, der vil blive tabt, når processoren er færdig tst_calloc () funktion (Ary er kun lokale markøren inden tst_calloc () og derfor vil det være "ødelagt" ved udgangen af tst_calloc ()).
Uden for indlejrede software denne kode - uden fri () - er dårlig, men meget udbredt praksis, fordi når programmet er færdig med alle sine tildelte hukommelse tilbage til systemet automatisk af selve operativsystemet.I Embedded verden programmet er aldrig færdig, så tænk, hvor mange XRAM er på din MCU og du vil vide, hvor mange gange tst_calloc () vil blive gennemført som forventet.

>> Hvad er KKS?
Noget særligt.Jeg mente Post Post Scriptum som korrektion til PS, hvor jeg gøre nogle trykfejl.Men bulletin board system gemte ukorrigerede besked, så denne bemærkning er så dummy som mig.

 
ændring erklæring til

calloc (størrelse, (int) sizeof (* Ary))

 

Welcome to EDABoard.com

Sponsor

Back
Top