30/09/2018, 17:01
Không thể giải phóng được con trỏ?
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
int main(){
int a = 10;
int *p1=&a;
int *p2 = (int *)malloc(sizeof (int));
p2 = p1;
*p2 = 12;
printf("%d %d %d", *p1, *p2, a);
free(p2);
_getch();
return 0;
}
Sao Không Giải Phóng Được Con Trỏ p2 Vậy.
Bài liên quan
Con trỏ p2 đang kiểm soát vùng nhớ được cấp phát bằng malloc bằng cách giữ địa chỉ đầu tiên của vùng nhớ đó.
Ngay khi bạn gán p2 = p1. Bạn đã bị memory leak. Vùng nhớ bạn cấp phát cho p2 giờ ai quản lý?
Có cần đặt tiêu đề ra vẻ nghiêm trọng vậy không?
thế cho mình hỏi sao khi thay đổi p2 thì tất cả đều thay đổi vậy
Mình trả lời bạn cũng cần đọc đâu.
đâu mình k thấy, mình muốn hỏi là tại sao khi gán *p2=12; thì tất cả đều thay đổi kể cả a…
Vì trước đó bạn gán tham chiếu của a cho p2. Tìm lại bài tham chiếu của anh @ltd coi lại là hiểu.
p1 giữ địa chỉ của a, p2 lấy giá trị của p1 => p2 cũng giữ địa chỉ của a.
*p1, *p2 thực chất là a.
*p2=12 <=> a=12 -> giá trị của a thay đổi -> toàn bộ thay đổi.