30/09/2018, 20:23
Cấp phát bộ nhớ trong c/c++
Bác nào giúp em với, cái devCpp của em nó bị điên loạn mất rồi, kết quả ra lung tung.
Bác nào chạy hộ đoạn này phát.
#include <stdio.h>
#include <stdlib.h>
int main(){
int a=10;
int *p;
p=(int *)malloc(sizeof(int));
p=&a;
printf("%d
",*p);
printf("Giai phong p
");
free(p);
printf("%d
",*p);
printf("giai phong lan nua p");
free(p);
}
Bài liên quan
p = (int *)malloc(sizeof(int));
-> p đc trỏ tới vùng nhớ đc cấp phát
p = &a;
-> p trỏ tới a.
~> vùng nhớ đc cấp phát bây giờ đang long nhong ngoài đó…
Lâu không mó vào c/c++ rối mù hết lên.
Mình muốn cấp phát 1 con trỏ, rồi giải phóng nó 2 lần xem xuất hiện lỗi như thế nào thôi @@
Nếu không nhầm là sẽ bị lỗi ngay.
Vì khi free, thì chương trình hú hệ điều hành đánh dầu vùng nhớ này không ai dùng nữa.
Vậy nên khi free lần nữa, ctrinh hú lần nữa. Hệ điều hành lúc này kiểu sẽ không hiểu tại sao đánh dấu free rồi mà kêu đánh dấu nữa ~> bối rối ~> chửi ~> lỗi :))
Anyway, cái trên bạn đang trỏ vào stack ((tro vào biến a), trong stack có cơ chế free khác (thay đổi giá trị của thanh ghi ESP thì phải, mình ko rành lắm) Vậy nên khi bạn dùng free như trên nên bị sai ~> crash
Muốn thử thì bạn bỏ dòng p = &a; đi thử là ok.
Nếu mình đang làm demo cho cái lỗi này @@
Sau khi giải phóng vùng nhớ đã được cấp động thì “vùng nhớ” đó sẽ là Undefined Behavior. Bất kì điều gì bạn làm trên vùng đó (chẳng hạn như free tiếp) đều là vô nghĩa.