Calloc на Keil компілятор

G

Guest

Guest
Привіт,

Будь-яка людина може допомогти мені в цій програмі нижче ...

change it to int *Ary;)

Ця програма отримала деякий попередження на Keil компілятор, але в VC компілятор його роботі (але Int XData * Ари,
зміна його Int * Ари;)Попередження Дисплей:

Увага: Назва модуля не унікальна
Module: C: \ Keil \ C51 \ LIB \ C51s.LIB (CALLOC)

Попередження: Нерозпізнані символи Зовнішній
Символ: _CALLOC
Модуль: calloc.obj (CALLOC)

Попередження: згадки невирішених Зовнішній
Символ: _CALLOC
Модуль: calloc.obj (CALLOC)

Код:

# Включити <stdlib.h>

# Включити <stdio.h>

# INCLUDE "reg52.h"Пустота tst_calloc (сопзЬ Int розмір)

(

Int XData * агу;

Int S = 2, N = 3;Агу = calloc (розмір, SizeOf (* Ари));IF (! Ари)

(

повернення;

)Ари = N;/ / Вільний (Ари);

)Основними Void (Порожнеча)

(

While (1)

(

tst_calloc (100);

))
 
Ваш код, здається, добре.Я спробував узагальнити його і все було ОК.Тільки два попередження L16 "незатребуваний сегмент, ігнорується для накладення процесу".
Єдине, чого я не розумію, чому не "calloc (за розміром, SizeOf (INT))".

PS: Строго кажучи: "Якщо (Ари == NULL)" було б краще, якщо ви візьмете до уваги C специфікацію, де NULL може бути що завгодно (нульове значення лише найбільш поширений випадок).

PPS: Вибачте за опечатки

 
Привіт,

Calloc (за розміром, SizeOf (INT)) та calloc (за розміром, SizeOf (* Ари)) обидва вони правильні, але SizeOf (* Ари) краще, тому що якщо ти коли-небудь змін Ари від Int * в більшій чи меншій типів, такі як подвійний *, то SizeOf (* Ари) все одно буде правильно.

Отже, ви отримали жодного уявлення, як проігнорувати попередження?Покажіть, будь ласка, Ваш код ..

Чи можете ви пояснити, що це вільне (Ари);?В якій ситуації ми повинні поставити, що ...

Що таке ППС?

Спасибо.

 
Привіт,

Ваша тому "calloc (за розміром, SizeOf (* Ари))" це розумно.Я ніколи не думав про можливість зробити щось подібне в моєму коді.Може бути, я не вірю своїм компілятор скільки ви робите.Мені потрібно вчитися і практикувати більше ...

>> Будь ласка, покажіть мені ваш код ..
Я тільки копіювати вставити код в uVision.Було Можливе для компіляції - Link - налагодження.Два сегмента ігнорується для накладення процес може бути проігноровано.Я не знаю, чому у вас такі не-циклічного попереджень.Ваша C51S.LIB intacted?Можливо, ви мали можливість безпосередньо CALLOC.C вставити в ваш проект (див. C51 \ LIB), і він вирішить свої проблеми.

>> Чи можете ви пояснити, що це вільне (Ари)
Легко.Якщо виділити частину пам'яті з купи (MALLOC, calloc, ...), ви повинні повернути його назад, коли ви willl не використовувати її більше.Якщо ні, вільної пам'яті, будуть вичерпані в самий короткий час, тому що кожне звернення до tst_calloc () буде виділяти нові ТСО 200 байт, які будуть втрачені при процесор закінчується tst_calloc () функції (Ари тільки місцевих покажчиків всередині tst_calloc () і Таким чином, це буде "знищений" наприкінці tst_calloc ()).
Поза вбудованого програмного забезпечення цього коду - без вільних () - це погано, але дуже часто практикують, тому що коли програма закінчила всі свої виділену пам'ять повертається в систему автоматично самої ОС.Світ у вбудованих програм ніколи не закінчена, тому подумайте, скільки XRAM на вашій MCU і ви будете знати, скільки разів tst_calloc () буде виконуватися, як очікувалося.

>> Що таке ППС?
Нічого особливого.Я мав на увазі Поштові Post Scriptum як поправка до ПС, де мені зробити деякі друкарські помилки.Але система Дошка оголошень сховав невиправлені повідомлення, щоб це зауваження як манекен, як мені.

 
Зміна заяви

calloc (розмір, (INT) SizeOf (* Ари))

 

Welcome to EDABoard.com

Sponsor

Back
Top