Sử dụng con trỏ để thay đổi giá trị trong biến trong struct nhưng chỉ có 2 biến trong struct thay đổi

E đã sử dụng con trỏ để thay đổi giá trị trong biến trong struct nhưng chỉ có 2 biến trong struct thay đổi còn biến con trỏ name là giá trị rác, mọi người giúp e giải đáp và cách để thay đổi giá trị trong biến con trỏ name

#include <iostream>
using namespace std;
typedef struct
{
	char *name;
	__int64 accountNumber;
	__int64 balance;
}BankAccount;
void prosessor(BankAccount *myAccount)
{
	char a[] = "LE TUAN ANH";
	myAccount->name = a;
	myAccount->accountNumber = 123456789;
	myAccount->balance = 100;

	cout << myAccount->name << endl;
	cout << myAccount->accountNumber << endl;
	cout << myAccount->balance << endl;
}

int main() {
	BankAccount myAccount;
	prosessor(&myAccount);
	cout << myAccount.name << endl;
	cout << myAccount.accountNumber << endl;
	cout << myAccount.balance << endl;
	system("pause");
	return 0;
}

image

1 Like

Sau khi thoát khỏi hàm “prosessor” thì char a[] bị giải phóng khỏi stack nên lúc bạn in tên thì name đang trỏ tới vùng nhớ chứa giá trị không xác định.
Bạn nên cấp vùng nhớ cho name trong main. Trong prosessor hãy copy name vào vùng nhớ đó. Dùng xong nhớ giải phóng nó đi

2 Likes

khi cấp phát biến cục bộ nó sẽ được lưu ở stack thì khi kết thúc hàm, stack được giải phóng nên trỏ đến địa chỉ a không còn giá trị giờ phải kháo báo biến toàn cục để lưu vào vùng heap để ko bị mất dữ liệu đúng ko ạ

1 Like

Biến toàn cục thì không lưu ở heap mà ở DS hoặc bss. Cấp phát động sẽ được cấp phát ở heap.
Bạn cấp phát động thì nhớ free nó sau khi dùng xong.

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