在 C 中将 malloc 用于动态数组

Using malloc for a dynamic array in C

我有下面这段代码。

我在第一次迭代后迭代 *attachmentsArray 时出现段错误,即使 size==3 也是如此。 我在这里做错了什么?

void secondary(char** array, long size)
{

   *array = (char*)malloc(size*sizeof(char));
   for(int i = 0; i < size; i++)
   {
       *array[i] = '.';
   }
}
void main()
{
    char* attachmentsArray;
    long size = 3;
    secondary(&attachmentsArry, size);
}

您的问题在于 *[] 运算符的相对优先级。您的线路:

    *array[i] = '.';

正在取消引用(或试图)指针数组中的 'ith' 元素。

要访问 指向 array 数组的 'ith' 元素,您需要的是:

    (*array)[i] = '.';

随时要求进一步澄清and/or解释。

索引运算符 ([]) 的优先级高于取消引用运算符 (一元 *)。实际上,最高运算符优先级层包含所有后缀运算符。因此,

   *array[i] = '.'

相当于

   *(array[i]) = '.'

。这是有效的,因为表达式 array[i] 具有类型 char *,从这个意义上说,它是一元 * 的有效操作数,但对于 i 而非零,array[i] 没有指定有效的指针,尝试取消引用它会导致段错误也就不足为奇了。

相反,您想要

   (*array)[i] = '.'

分段错误是由于 *array[i]="."因为 malloc 只是 returns 指向分配的内存起始地址的指针,你不能通过索引直接迭代..

其他答案也是正确的,但您也可以通过递增指针来指向相应的地址块,例如 *array = "."; *数组++;