Hỏi về hàm trong C++

Xin chào mọi người. Mình đang học C++ và có một số câu hỏi về hàm C++ :

  1. Vì sao con trỏ hàm không xóa data khi kết thúc hàm
#include <iostream>
using namespace std;

int* def(){
	int x = 10;
	int *n = &x;
	cout << "Trong ham: " << &x << "\t Du lieu: "<< x << endl;
	return n;
}

int main(){
    int *p = def();
    cout << "Ngoai ham: " << p << "\t Du lieu: "<< *p << endl;
    return 0;
}
  1. Sự khác nhau giữa hàm inline và hàm với tham số là tham chiếu. Vì mình chưa hiểu hàm inline lắm :’(

Cái này dân chuyên gọi nó là dangling pointer, nói chung vùng giá trị đc tạo ra trên stack thuộc về ai thì người ấy dùng, đi ra khỏi hàm đó thì vùng nhớ ở chỗ đó trên stack trở thành undefined, mọi chuyện đều có thể xảy ra với nó, bạn học môn asm là sẽ hiểu tại sao lại như vậy.
Chuyện hàm là inline hay không là chuyện của trình biên dịch, bạn khỏi phải lo.

5 Likes

Cho bạn thấy thêm. :slight_smile:

#include <iostream>
#include <windows.h>
using namespace std;

int* def(){
	int x = 10;
	int *n = &x;
	cout << "Trong ham: " << &x << "\t Du lieu: "<< x << endl;
	return n;
}

int main(){
    int *p = def();
    Sleep(5000);
    cout << "Ngoai ham: " << p << "\t Du lieu: "<< *p << endl;
    return 0;
}

Bạn chạy thì sẽ thấy giá trị bị thay đổi.

Còn tại sao hàm không xóa data khi kết thúc thì mình sẽ hỏi lại bạn là tại sao phải xóa data trong khi giải phóng vùng nhớ là đủ rồi, mà xóa là như thế nào. :slight_smile:

2 Likes

Mình đang học dslk đơn hàm thêm phần tử mới đều khởi tạo trong hàm vậy và return lại 1 con trỏ nếu như b giải thích thì nó sai à.

NODE* GetNODE(int x) 
{
	NODE *p = new NODE;
	if(p == NULL)
	{
		return NULL;
	}
	p->Data = x;
	p->pNext = NULL;
	return p;
}

Con trỏ này là được cấp phát động, nên nó sẽ nằm trên heap chứ không phải ở stack. :slight_smile:

Và nó vẫn sẽ thuộc quản lý của bạn cho đến khi bạn giải phóng nó.

Còn như int x = 10; kia là được khai báo trong hàm, và nó sẽ được compiler cấp cho vùng nhớ trên stack mỗi khi gọi hàm, và sẽ tự động giải phóng sau khi kết thúc. :slight_smile:

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