30/09/2018, 20:36

hỏi về cách sử dụng hàm malloc() trong một function()

mình có viết một chương trính tính lãi ngân hàng như thế này

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
void bank(float tien,float nam,float lai);
int main()
{
	float nam=0;
	float sotien=0,lai=0;
	printf("xin chao mung ban den voi ngan hang cua chung toi :

");
	printf("moi ban nhap so tien ban muon gui :");
	scanf("%f",&sotien);
	printf("muc lai suat ma ban mong muon :");
	scanf("%f",&lai);
	printf("so nam ban muon gui tien o ngan hang cua chung toi :");
	scanf("%f",&nam);
	bank(sotien,nam,lai);
	getchar();
	return 0;
}
void bank(float tien,float nam,float lai)
{
	float *n=NULL;
	float *s=NULL;
	n=malloc(nam*sizeof(float));
	s=malloc(nam*sizeof(float));
	for(int i=0;i<nam;i++)
	{
		n[i]=tien*lai/100;
		tien=tien+n[i];
		s[i]=tien;
	}
	for(int i=0;i<nam;i++)
	{
		printf("so tien lai sau moi nam %d la :%.3f
",i+1,n[i]);
		printf("tong so tien cua %d la :%.3f
",i+1,s[i]);
	}
	free(n,s);
}

trong hàm void bank
mình có dùng
n=malloc(namsizeof(float));
s=malloc(nam
sizeof(float));
mà nó toàn báo hai dòng này không hợp lệ à vậy hai dòng này sai ở đâu vậy mọi người rất mong được mọi người chỉ giáo

Bé tập Code viết 22:37 ngày 30/09/2018

malloc có parameter kiểu size_t mà sao bạn chưa ép kiểu nam rồi mới truyền vào tính toán.

free(n,s); sao free thoải mái vậy ^^

Jobs Apple Steve viết 22:45 ngày 30/09/2018

ep kieu cho nam ve kieu gi ha ban

Bé tập Code viết 22:50 ngày 30/09/2018
n =(float*) malloc((size_t)nam*sizeof(float));
s = (float*)malloc((size_t)nam*sizeof(float));
Jobs Apple Steve viết 22:47 ngày 30/09/2018

cai size_t la de lam gi ha ban

Jobs Apple Steve viết 22:51 ngày 30/09/2018

mà trong một taig liệu mình đọc nó toàn ghi thế này thôi bạn à

int soluongbanbe=0;
scanf("%d",&soluongbanbe);
int *banbe=NULL;
banbe=malloc(soluongbanbe*sizeof(int))
Bé tập Code viết 22:47 ngày 30/09/2018

size_t là một kiểu thôi, nó tương đương unsigned int nhưng chủ yếu được dùng để biểu thị size của object (biến, array, struct…)

sizeof trả về kiểu size_t nên bạn nên ép kiểu nam về size_t rồi mới tính toán.

Hàm free chỉ truyền vào một đối số sao bạn lại truyền vào nhiều hơn ???

Jobs Apple Steve viết 22:52 ngày 30/09/2018

@BetapCode chỉ giáo thêm nha bạn thanh nhiều

Jobs Apple Steve viết 22:46 ngày 30/09/2018

sao trong scah cua minh no chi viet la

int *a=NULL;
a=malloc(n*sizeof(int)

chứ nó không viết như ban đâu à

*grab popcorn* viết 22:40 ngày 30/09/2018

Chương trình bạn ok mà, chỉ sai ở chỗ free chỉ có 1 parameter thôi
free(void * ptr);

Jobs Apple Steve viết 22:44 ngày 30/09/2018

nó báo lỗi ở hai dòng này này

n=malloc(nam*sizeof(float));
s=malloc(nam*sizeof(float));

lỗi là bạn đã convet không hợp lệ à
sửa như bạn @BetapCode

n =(float*) malloc((size_t)nam*sizeof(float));
s = (float*)malloc((size_t)nam*sizeof(float));

thì lại chạy ok à

*grab popcorn* viết 22:41 ngày 30/09/2018

Bạn biên dịch C bằng C++ Compiler phải ko :?
C++ thì nó bắt ép kiểu kỹ càng lắm.
Còn C thì cứ tung tăng mà mần. :))
http://ideone.com/ns1Nlt

Jobs Apple Steve viết 22:38 ngày 30/09/2018

mình đang dùng c mà
mà cũng kỳ lại nếu viết như thế này trong hàm main()
thì ok vô cùng luôn nó chạy

n=malloc(nam*sizeof(float));
s=malloc(nam*sizeof(float));

sang hàm khác thì nó lại không chay và báo lỗi liên tuc bạn à @drgnz

Jobs Apple Steve viết 22:39 ngày 30/09/2018

mình dùng code block bạn à

Jobs Apple Steve viết 22:37 ngày 30/09/2018

bạn à @BetapCode mình vừa bỏ size_t của bạn đi vẫn chạy bình thường bạn à không cần nó vẫn chạy à

Bé tập Code viết 22:52 ngày 30/09/2018

Mình đâu có bàn về chuyện “chạy được” và không “chạy được”.

Bạn đọc kĩ về những thứ mình đã đề cập ở trên nhé.

Tập viết code kĩ và đúng chuẩn như vậy tăng thêm kiến thức mà còn tránh được bug nữa

Sách gì mà lại không ép kiểu con trỏ trả về của malloc luôn, bỏ sách đó đi nhé ^^

Jobs Apple Steve viết 22:43 ngày 30/09/2018

chuan roi ban à cảm ơn bạn mình để đuôi là cpp nên nó để thoe c++ bạn à sang c cái thì không cần thanh you i love you @drgnz

Bài liên quan
0