#include <stdio.h>
#include <malloc.h>
int insertAt(int *Arr, int len, int num) {
for (int i = 0; i < len; ++i) {
if (num <= Arr[0])
return 0;
else if (num >= Arr[len])
return len + 1;
else if (num >= Arr[i - 1] && num <= Arr[i])
return i;
}
}
int * sortedArrayInsertNumber(int *Arr, int len, int num){
int *output = (int *)malloc((len + 1)*sizeof(int));
if (len <= 0)
return NULL;
for (int i = 0, j = 0; j <= len+1; ++i, ++j) {
if (i == insertAt(Arr, len, num) && j==i) {
output[j] = num;
--i;
}
else if(insertAt(Arr,len,num)==len+1) {
output[j] = num;
}
else {
output[j] = Arr[i];
}
}
return output;
}
int main() {
int input[5] = {2,4,6,8,10};
int *out = (int*)malloc(6*sizeof(int));
out = sortedArrayInsertNumber(input, 5, 12);
for(int i=0;i<6;++i) {
printf("%d\n", out[i]);
}
}
当我尝试这个测试用例时,它有时会给我一个运行时错误。其他时候,它会输出:运行时错误:insertatIndex
2
4
6
8
10
12
哪个没有意义?
另外,有没有办法让我的代码更好?
这个问题要求我在相应的索引处插入一个值num
。
你正在泄漏内存分配出来,并用'sortedArrayInsertNumber'返回的内存覆盖它的值。 – LPs
'Arr [len]'将访问数组越界'Arr [5]'。在你的情况下,索引从'0'开始到'4'。 – LPs
@LP即使当我仅仅使用 'int * out; out = sortedArrayInputNumber(Arr,5,12); ' 同样的问题仍然存在(注意:它仅在有时会给我提供运行时错误,而其他时候它给了我上面提到的正确答案)。我在具有长度len + 1的sortedArrayInsertNumber函数中返回一个全新的数组“输出”。 –