Cách dùng hàm malloc trong C

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 :sweat_smile:

1 Like

Nếu có thời gian thì bạn tham khảo bài viết này nhé, good luck!

4 Likes

Hoặc ở đây

http://www.cplusplus.com/reference/cstdlib/malloc/

4 Likes

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.

1 Like

à 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));
1 Like

ok em sửa đk rồi ạ :smile: :smile:

1 Like

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.

3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?