mn cho em hỏi các dùng hàm malloc để cấp phát bộ nhớ động. ví dụ nhập vào dãy n từ bàn phím và sử dụng hàm malloc để nhập vào bao nhiêu thì cấp phát bấy nhiêu. em mới học phần con trỏ nên hơi khó hiểu mong mọi người giúp cho
Cách dùng hàm malloc trong C
em dùng hàm malloc như vậy có được không ạ
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i,n, *x;
printf("nhap vao n: ");
scanf("%d",&n);
x=(int*)malloc(n);
for(i=0;i<n;i++)
{
printf("nhap vao phan tu thu %d: ",i+1);
scanf("%d",(x+i));
}
for(i=0;i<n;i++)
printf("%4d",*(x+i));
return 0;
}
Em thiếu free(x)
rồi. Sau khi cấp phát vùng nhớ em phải hủy nó đi.
à em quên. cảm ơn anh!
em chạy xong nó ra thông báo như này là bị sao anh đat?
Em gửi lại toàn bộ code lên anh xem thử.
#include <stdio.h>
#include <stdlib.h>
#include<malloc.h>
int main()
{
int i,n, *x;
printf("nhap vao n: ");
scanf("%d",&n);
x=(int*)malloc(n);
for(i=0;i<n;i++)
{
printf("nhap vao phan tu thu %d: ",i+1);
scanf("%d",(x+i));
}
for(i=0;i<n;i++)
printf("%4d",*(x+i));
free(x);
return 0;
}
Em sửa lại hàm malloc
, hàm malloc
của em chỉ có n
bytes. Trong khi em tạo ra mảng int
. mỗi int
4 bytes.
x=(int*)malloc(n*sizeof(int));
ok em sửa đk rồi ạ
Cho em hỏi là,vùng nhớ mà hàm free(x) hủy là vùng nhớ con trỏ chỉ tới hay vùng nhớ để lưu con trỏ ạ
cấp phát động dùng new có khác gì với malloc k
vùng nhớ con trỏ chỉ tới, khi dùng free x có nghĩa là trả lại vùng nhớ đã mượn của bộ nhớ ko làm thay đổi giá trị mà nó trỏ đến và kể cả giá trị của nó. Thứ duy nhất nó làm là giải phóng ( chỉ trả lại vùng nhớ )
Sao em chỉ cần có mỗi n nó vẫn chạy đc nhỉ. không có sizeof(int)
Đừng khai báo ăn gian, kẻo bị lỗi nát cả ra thì lại khổ.
Khai báo không phải để trưng cho có đâu. Nó nhằm mục đích bảo toàn dữ liệu, không cho các thành phần khác được tác động vài dữ liệu của bạn.
Ví dụ về việc bạn mua đất, nhưng làm biếng nói quá. Cơ bản là phải khai báo, thông qua các cấp chính quyền để họ xác nhận là của bạn.