我试图做一个void insertion(),但总是有一个分割错误,见下文.同时,我引用了这link条.

首先,我做了realloc(),然后把所有内存移到position之后的下一个空间,最后把insertion放到position中,增加nArraySize.

#include <stdio.h>
#include <stdlib.h>

void printArray(double array[], unsigned int size)
{
  for (unsigned int i = 0; i < size; ++i) 
  {
    printf("%.3f  ", array[i]);
  }
  printf("\n");
}

void insert(double **array,
            size_t *nArraySize,
            double insertion,
            unsigned int position)
{
  //realloc the memory space first
  *array = realloc(*array, (*nArraySize+1) * sizeof(double));

  for(unsigned int i = nArraySize[0]-1; i >= position; i--)
  {
     *array[i+1] = *array[i];
  }

  *array[position] = insertion;

  *nArraySize += 1;

}

int main()
{
  double *t = calloc(4, sizeof(double));

  t[0] = 0; 
  t[1] = 1; 
  t[2] = 2; 
  t[3] = 3;

  size_t k = 4;

  insert(&t, &k, 1, 1);

  printf("k is %zu\n", k);
  printArray(t, k);
  free(t);
}

请帮忙.欢迎任何建议.

推荐答案

由于运算符的优先级,这些语句不正确.

*array[i+1] = *array[i];
*array[position] = insertion;

也就是说,后缀运算符的优先级高于一元运算符.

你也得写

( *array )[i+1] = ( *array )[i];
( *array )[position] = insertion;

或者就像你已经在做的那样

array[0][i+1] = array[0][i];
array[0][position] = insertion;

请注意,函数insert是不安全的,因为无法判断position的值是否小于或等于传递数组中的当前元素数.

这也是一个循环

for(unsigned int i = nArraySize[0]-1; i >= position; i--)
{
   ( *array )[i+1] = ( *array )[i];
}

可以调用未定义的行为.首先,变量i总是一个非负数.也就是说,i的值不能为负值,因为变量i的类型为unsigned int.现在我们假设*nArraySize等于1position等于0;在这种情况下,你有循环

for(unsigned int i = 0; i >= 0; i--)
{
   ( *array )[i+1] = ( *array )[i];
}

在循环的第一次迭代之后,i的值将非常大,大于0.

因此,最好按照以下方式重写循环

for(unsigned int i = *nArraySize; i > position; i--)
{
   ( *array )[i] = ( *array )[i-1];
}

C++相关问答推荐

CC crate 示例不会与C函数链接

无效使用未定义类型'structsquare'?

sizeof结果是否依赖于字符串的声明?

使用单个字节内的位字段

Ebpf内核代码:permission denied:invalid access to map value

Tiva TM4C123GXL的I2C通信

将常量转换为指针会增加.数据大小增加1000字节

在C语言中,是否可以使枚举数向后计数?

struct -未知大小

1处的解析器错误:yacc语法的语法错误

在Apple Silicon上编译x86的Fortran/C程序

解决S随机内存分配问题,实现跨进程高效数据共享

为 struct 中的数组动态分配内存时出错

为什么我的半数组测试和奇数组测试不起作用?(我使用Assert进行调试)

为什么会出现此错误?二进制表达式的操作数无效

程序如何解释变量中的值

当另一个指向 const 的指针观察到数据时,通过指针更改数据是否安全?

获取 struct 中匿名 struct 的大小

将字节/字符序列写入标准输出的最简单形式

c 函数指针,另一种语法