01/10/2018, 11:42

Lỗi khi cấp phát vùng nhớ cho con trỏ trong C

Cho e hỏi là tại sao giống nhau mà a bị lỗi còn b thì không

Lỗi : E0513 a value of type “int *” cannot be assigned to an entity of type “int”

int *a, *b;//Khai báo 2 con trỏ a,b
a = (int *)malloc(sizeof(int *)); //cấp phát vùng nhớ cho con trỏ a <--- BỊ LỖI TẠI ĐÂY 
b = (int *)malloc(sizeof(int *)); //cấp phát vùng nhớ cho con trỏ 							  

printf("Nhap vao so a : ");
scanf_s("%d", a);// a là con trỏ nên không cần thêm &
printf("Nhap vao so b : ");
scanf_s("%d", b);

int *Max = TimMax(a, b);
int Min = TimMin(a, b);

printf("Min = %d, Max = %p", Min, Max);
 //giả phóng vùng nhớ cho a,b
free(b);
free(a);
Trần Hoàn viết 13:46 ngày 01/10/2018

Min, Maxint hay int* thế bạn?

guo_da viết 13:51 ngày 01/10/2018
  1. bạn chưa cấp phát cho con *Max
  2. Kiểu trả về của hàm timMax và timMin của bạn là kiểu int hay *int.
  3. tham số đầu vào của hàm timMax và timMin là int hay *int
    Mình nghĩ vấn đề của bạn là nhầm lẫn giưã int và *int
NBQ viết 13:53 ngày 01/10/2018

a = (int *)malloc(sizeof(int *)); //cấp phát vùng nhớ cho con trỏ a <— BỊ LỖI TẠI ĐÂY

Nếu lỗi ở đây thì khả năng sẽ lỗi cả a lẫn b, rất có thể bạn chưa include thư viện của hàm malloc.
Thử thêm lệnh include sau:

#include <stdlib.h>

int *Max = TimMax(a, b);
int Min = TimMin(a, b);

Lỗi : E0513 a value of type “int *” cannot be assigned to an entity of type “int”

Thông báo lỗi chỉ ra lỗi ở lệnh int Min = TimMin(a, b); Mình đoán trong hàm TimMax và TimMin bạn trả về một con trỏ kiểu int. Trong khi đó bạn khai báo biến Min là kiểu nguyên nên lệnh gán là không hợp lí. Có thể sửa lại bằng:

int *Min = TimMin(a, b);
NBQ viết 13:43 ngày 01/10/2018

bạn chưa cấp phát cho con *Max

Nếu trong hàm TimMax(a, b); trả về một con trỏ kiểu int thì không cần cấp phát cho int *Max nữa.

name viết 13:57 ngày 01/10/2018

sizeof(int *)

sizeof(int *) => sizeof(int)

Bài liên quan
0