我有一个程序,在那里,我使用 malloc 动态分配内存;这是重要的部分:
unsigned int *hours;
unsigned int *minutes;
hours = (unsigned int *) malloc(n * sizeof(*hours));
minutes = (unsigned int *) malloc(n * sizeof(*minutes));
在此之后,我有一个 for 循环,循环 n 次;每次读取时间并在 hours[i] 存储小时,在 minutes[i] 存储分钟; for (i = 0; i < n; i++)
我在分配之前阅读了 n :
scanf(%d, &n);
接下来,我有一个函数,它需要 3 个参数,它看起来像这样:
void convertToMinutes(unsigned int *hours[],unsigned int *minutes[],int n)
{
unsigned int i;
for (i = 0; i < n; i++)
{
*minutes[i] =*hours[i]*60 + *minutes[i];
}
}
这是导致程序崩溃的部分。我正在使用 Dr. Memory 看看会发生什么,这里是转储:
Error #1: UNADDRESSABLE ACCESS: reading 0x00000005-0x00000009 4 byte(s)
# 0 convertToMinutes
# 1 main
Note: @0:00:11.408 in thread 1740
Note: instruction: mov (%eax) -> %ecx
如您所见,它尝试读取 0x00000005 处的地址,这导致 Windows 将其关闭。
所以在调用这个函数之前,我查看了小时和分钟数组的地址,这是我发现的:
for n = 3
hours base 10948584
hours+1 10948588
hours+2 19848592
minutes base 10948608
minutes+1 10948612
minutes+2 10948616
(地址转换为 int)
我迷路了。我不知道出了什么问题。指针对我来说是新的(我已经使用它们几天了),我不知道为什么它突然试图在禁止的地址读取。我究竟做错了什么?