Một số vấn đề về con trỏ

em mới học lập trình, trong hàm swap đổi giá trị 2 số, thầy giáo có hướng dẫn mẫu như sau

void swap(int *a, int *b) {
	int temp ;
	temp = *a;
	*a = *b;
	*b = temp;
}

em về nhà có sửa đổi một chút

void swap(int *a, int *b) {
	int *temp ;
	*temp = *a;
	*a = *b;
	*b = *temp;
}

chương trình biên dịch k báo lỗi gì, nhưng lúc chạy lại k được, mong mọi người giải thích với ạ (em dùng dev-c++)

*temp trỏ linh tinh nên rất nguy hiểm.

1 Like

vấn đề k phải là nó trỏ vào đâu, mà là t đang hoán đổi giá trị a vs b qua giá trị mà con trỏ trỏ tới, theo lý thuyết cái đoạn code này chẳng có vấn đề gì cả

Hi Mung Nguyen Ngoc.
Vậy nó ra cái gì ? Chụp log lên xem cái coi.

ví dụ của mình đây

#include<stdio.h>
void swap(int *a, int *b) {
	int *temp ;
	*temp = *a;
	*a = *b;
	*b =  *temp ;
}
/*
void swap(int *a, int *b) {
	int temp ;
	temp = *a;
	*a = *b;
	*b = temp;
}
*/

int main() {
	int a = 5;
	int b = 10;
	printf("\nTruoc: a= %d \t b = %d\n",a,b);
	swap(&a,&b);
	printf("\nSau: a= %d \t b = %d\n",a,b);
	return 0;
}

(dự đoán bull shit)
Code thớt đúng nhé.

thế thì bạn nhầm
:joy::joy::joy::joy::joy::joy::joy::joy:

copy paste code nó không hiển thị như ý, nguyên hình của mình là ntn

bạn nhầm rồi, vì tất cả các biến đã dùng toán tử dereference rồi, nên kết quả cũng sẽ ra đúng mà thôi

1 Like

Thấy thớt bảo code không chạy nên mạnh dạn đoán đó là khả năng duy nhất. Nhưng code chạy mà nhỉ? vừa test xong :joy:

Kết quả vẫn đúng mà!

các bạn dùng trình biên dịch gì, t nghĩ có lẽ do bộ debug của dev-c++ rồi

@hirro_okamura trình biên dịch của dev-c không chấp nhận cách khai báo này rồi, con trỏ temp trỏ lung tung

bạn thử cấp phát cho nó xem

sure, t vừa chạy thử onlinegdb.com, thấy ra ngon
sau vụ này xóa dev-c ra khỏi máy luôn, cùi bắp quá

@hirro_okamura bạn thử cấp phát cho nó đi

gán nó = NULL vẫn thế, mà k sao, t chạy trình biên dịch trên mạng thấy ok rồi, chắc do dev-c cùi quá

@hirro_okamura bạn thêm lệnh này đi temp = (int *) malloc(4);chắc là chạy được

ok bạn, sao cấp phát bộ nhớ động lại chạy được nhỉ :smiley:

Hi Mung Nguyen Ngoc.
Bạn xem kĩ về con trỏ, quản lý bộ nhớ, giá trị mặc định của biến.

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