进行分配,必须动态分配一个指针数组,然后在函数末尾释放它。问题是当我释放阵列时,它给我一个“检测到堆损坏”的错误,我无法弄清楚为什么会发生这种情况。有人可以在这里看到东西吗?它说我在分配的内存结束后正在写,但我看不到为什么。
typedef struct _client
{
char id[9];
char phone[12];
} Client;
Short_client *createShortClientArr(int n)
{
Client *arr = (Client *)malloc(n * sizeof(Client));
char garbage;
garbage = getc(stdin);//for getting the '\n' from the last input
for (int i = 0; i < n; i++)
{
fgets(arr[i].id, 9, stdin);
arr[i].id[9] = '\0';
garbage = getc(stdin);
fgets(arr[i].phone, 12, stdin);
arr[i].phone[12] = '\0';
garbage = getc(stdin);
}
free(arr);
}
[释放内存时,Windows还将检查并查看是否已写入数组末尾。自从这样做以来,它会抛出此异常,以使您知道自己有一个错误。
char phone[12];
这将创建一个索引为0-11的数组。
arr[i].phone[12] = '\0';
12不是此数组的有效索引,因此这会将'\0'
写入数组末尾的char
。您的其他阵列也有相同的错误。