当我通过Visual Studio运行代码时,我收到错误-1073741819,而当我使用在线c编译器时,我得到了:“分段错误(核心已转储)”。
首先,我收到“双重释放或损坏”错误,但随后我对代码进行了一些更改。我已经尝试发现错误已有一段时间了,但我无法。
要指定,arr是一个长度为2n的数组,并且仅包含1到n之间的数字。
这是有问题的代码:
bool islegal(int arr[], int n)
{
int *count = (int*)malloc(sizeof(int)*(n+1));
for (int i = 0; i < 2*n; i++)
{
count[arr[i]]++;
if (count[arr[i]] > 2)
{
free(count);
return false;
}
}
for (int i = 0; i < 2*n; i++)
{
if (count[arr[i]] == 2)
{
if (i+arr[i]<2*n && arr[i] != arr[i + arr[i]])
{
free(count);
return false;
}
}
}
free(count);
return true;
}