Tôi có một chương trình sử dụng malloc để phân bổ động bộ nhớ; đây là phần quan trọng:
unsigned int *hours;
int không dấu * phút;
giờ = (unsigned int *) malloc(n * sizeof(*hours));
phút = (unsigned int *) malloc(n * sizeof(* Minutes));
Sau đó, tôi có một vòng lặp for lặp lại n lần; mỗi lần nó đọc thời gian và lưu giờ theo giờ[i] và số phút theo phút[i]; vì (i = 0; i < n; i++)
Tôi đọc n trước khi gán:
scanf(%d, &n);
Tiếp theo, tôi có một hàm có 3 tham số và nó trông như thế này:
void ConvertToMinutes(unsigned int *hours[],unsigned int * Minutes[],int n)
{
unsigned int i;
vì (i = 0; i < n; i++)
{
*phút[i] =*giờ[i]*60 + *phút[i];
}
}
Đây là phần khiến chương trình bị lỗi. Tôi đang sử dụng Dr. Memory để xem điều gì sẽ xảy ra, đây là kết xuất:
Lỗi #1: TRUY CẬP KHÔNG THỂ ĐỊA CHỈ: đọc 0x00000005-0x00000009 4 byte
# 0 chuyển đổiToMinutes
số 1 chính
Lưu ý: @0:00:11.408 trong luồng 1740
Lưu ý: hướng dẫn: mov (%eax) -> %ecx
Như bạn có thể thấy, nó cố đọc địa chỉ 0x00000005, điều này khiến Windows tắt nó.
Vì vậy, trước khi gọi hàm này, tôi đã xem địa chỉ của mảng giờ và phút và đây là những gì tôi tìm thấy:
với n = 3
giờ cơ sở 10948584
giờ+1 10948588
giờ+2 19848592
phút cơ sở 10948608
phút+1 10948612
phút+2 10948616
(địa chỉ được chuyển đổi thành int)
Tôi bị lạc. Tôi không biết có chuyện gì vậy. Con trỏ còn mới đối với tôi (tôi đã sử dụng chúng được vài ngày) và tôi không biết tại sao nó đột nhiên cố đọc ở một địa chỉ bị cấm. Tôi đã làm gì sai?
Chữ ký hàm này nhận một tham số trỏ đến một số nguyên không dấucon trỏ
mảng
void ConvertToMinutes(unsigned int *hours[],unsigned int * Minutes[],int n)
Nhưng mảng của bạn là int không dấu
còn hơn là int không dấu *
mảng. Hãy thử thay đổi nó thành
void ConvertToMinutes(unsigned int Hours[],unsigned int Minutes[],int n)
Hoặc (vì dù sao đối số mảng cũng phân rã thành con trỏ)
void ConvertToMinutes(unsigned int* giờ, unsigned int* phút, int n)
Bên trong hàm loại bỏ tham chiếu và thay đổi nó thành:
vì (i = 0; i < n; i++)
{
phút[i] = giờ[i]*60 + phút[i];
}
Tôi là một lập trình viên xuất sắc, rất giỏi!