Calloc trên Keil Compiler

G

Gi

Guest
Chào,

Bất cứ ai cũng có thể giúp tôi về chương trình này dưới đây ...

change it to int *Ary;)

Chương trình này đã nhận một số cảnh báo tại Keil Compiler nhưng ở VC biên dịch nó làm việc (nhưng xdata int * ary;
thay đổi nó để int * ary;)Cảnh báo Hiển thị:

Cảnh báo: Tên Module Không Unique
Module: C: \ Keil \ C51 \ LIB \ C51s.LIB (CALLOC)

Cảnh báo: Chưa giải quyết ngoài Bollywood
Biểu tượng: _CALLOC
Module: calloc.obj (CALLOC)

Cảnh báo: Xuất xứ để tham khảo Chưa giải quyết ngoài
Biểu tượng: _CALLOC
Module: calloc.obj (CALLOC)

Mã số:

# 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;/ / Việt (ary);

)void main (void)

(

trong khi (1)

(

tst_calloc (100);

))
 
Mã của bạn có vẻ là tốt.Tôi đã thử biên dịch nó và tất cả mọi thứ đã được OK.Chỉ có hai cảnh báo L16 "chưa bôi phân đoạn, bỏ qua cho quá trình lớp phủ".
Điều duy nhất mà tôi không hiểu là tại sao lại không "calloc (size, sizeof (int))".

PS: Nói đúng ra "if (ary == NULL)" sẽ tốt hơn nếu bạn đưa vào tài khoản của đặc tả C, nơi NULL có thể được bất cứ điều gì (không có giá trị chỉ là trường hợp phổ biến nhất).

PPS: Xin lỗi cho mistyping

 
Chào,

The (calloc kích thước, sizeof (int)) và calloc (size, sizeof (* ary)) cả hai đều là đúng, nhưng sizeof (* ary) là tốt hơn bởi vì nếu một ngày nào đó bạn thay đổi từ int * ary đến lớn hơn hoặc nhỏ hơn kiểu như double *, sau đó sizeof (* ary) vẫn được chính xác.

Vì vậy, bạn có bất kỳ ý tưởng làm thế nào để bỏ qua WARNING?Xin chỉ cho tôi mã của bạn ..

Bạn có thể vui lòng giải thích điều này (Việt ary là những gì);?Trong tình hình những gì chúng ta cần phải đặt mà ...

PPS là gì??

Cảm ơn.

 
Chào,

Lý do của bạn tại sao "calloc (size, sizeof (* ary))" là thông minh.Tôi chưa bao giờ nghĩ về khả năng để làm một cái gì đó như thế này trong mã của tôi.Có lẽ tôi không tin tưởng của tôi trình biên dịch C nhiều như bạn.Tôi phải tìm hiểu và thực hành tiết ...

>> Xin chỉ cho tôi mã của bạn ..
Tôi chỉ có bản sao dán mã của bạn vào uVision.Nó được biên dịch Posible - liên kết - gỡ lỗi.Hai phân đoạn bị bỏ qua cho quá trình lớp phủ có thể được an toàn bỏ qua.Tôi không biết, tại sao bạn lại không như vậy-ignorable cảnh báo.Là C51S.LIB của bạn intacted?Có lẽ, bạn có thể chèn CALLOC.C trực tiếp vào dự án của bạn (xem C51 \ LIB) và nó sẽ giải quyết khó khăn của bạn.

>> Bạn có thể vui lòng giải thích điều này (Việt ary là những gì)
Nó rất dễ dàng.Khi bạn cấp phát bộ nhớ một số từ heap (malloc, calloc, ...) bạn nên quay trở lại khi bạn willl không sử dụng nó nữa.Nếu không, bộ nhớ miễn phí sẽ cạn kiệt trong một thời gian rất ngắn, bởi vì mỗi cuộc gọi đến tst_calloc () sẽ phân bổ CCA mới 200 Bytes đó sẽ bị mất khi bộ vi xử lý hoàn thiện chức năng () tst_calloc (ary chỉ là địa phương con trỏ bên trong tst_calloc () và do đó nó sẽ được "tiêu diệt" vào cuối tst_calloc ()).
Bên ngoài phần mềm nhúng mã này - mà không cần miễn phí () - là xấu, nhưng rất phổ biến thực hành, bởi vì khi chương trình kết thúc tất cả các cấp phát bộ nhớ của nó được trả lại cho hệ thống tự động của hệ điều hành của chính nó.Trong chương trình nhúng trên thế giới là không bao giờ kết thúc, nên nghĩ rằng, bao nhiêu XRAM MCU là ngày của bạn và bạn sẽ biết bao nhiêu lần tst_calloc () sẽ được thực hiện như mong đợi.

>> PPS là gì??
Không có gì đặc biệt.Tôi có nghĩa là bài Đăng Scriptum như chỉnh cho PS, nơi tôi làm cho một số lỗi đánh máy.Nhưng hệ thống bảng thông báo tin nhắn trốn uncorrected để nhận xét này là như dummy như tôi.

 
thay đổi tuyên bố để

calloc (kích thước, (int) sizeof (* ary))

 

Welcome to EDABoard.com

Sponsor

Back
Top