问题是什么?
// функция для удаления элемента массива
int remove_element(double *array, int *n, int pos)
{
if (pos >= *n || pos < 0)
{
printf("Incorrect position\n");
return ERROR_POSITION;
}
double *tmp = (double*)calloc(*n, sizeof(double));
if (!pos)
for (int i = 0; i < pos; i++)
tmp[i-1] = array[i];
else
{
for (int i = 0; i < pos; i++)
tmp[i] = array[i];
for (int i = pos; i < *n; i++)
tmp[i-1] = array[i];
}
free(array);
(*n)--;
array = (double*)malloc(*n * sizeof(double));
for (int i = 0; i < *n; i++)
array[i] = tmp[i];
free(tmp);
return SUCCESS;
}
好吧,至少
tmp
在循环的第一次迭代期间将访问哪个元素?好吧,我们也不知道您传递的参数是什么。也许
array
您甚至根本没有动态分配的数组?顺便说一句,即使是动态分配的,你仍然存在内存泄漏:你分配了新内存,但你安全地丢失了指向它的指针……而且如果你在退出函数时转向地址array
,就会有麻烦: 内存已经被释放了。