我发现自己进行了很长时间的故障排除,并试图找出我的函数出了什么问题。我必须说,我不能100%确定这是否是我想要的正确语法。我有一个函数,假设用列表数据初始化结构的1D数组。该功能之前的一切都经过了测试。这就是有问题的函数:
Three* createThreeArr(Three** arr, ListThree** head, int counter)
{
int i = 0;
ListThree* pIndex = *head;
*arr = (Three*) calloc(counter,sizeof(Three));
for (i = 0; i < counter ; i++)
{
(arr[i])->col = pIndex->data.col;
(arr[i])->row = pIndex->data.row;
(arr[i])->value = pIndex->data.value;
pIndex = pIndex->next;
}
return *arr;
}
我可以在第一次迭代中插入,但在VS19中引发了异常。这就是我传递参数的方式:
*arr = createThreeArr(arr,head,counter);
这些是结构:
typedef struct Three
{
int value;
int row;
int col;
}Three;
typedef struct ListThree
{
struct Three data;
struct List* next;
}ListThree;
这是我的主要
void Ex3()
{
Three* arr = NULL;
ListThree* head = NULL;
createArrayAndList(matrix,rows,cols,&head,&arr);
}
此函数createArrayAndList:
int createArrayAndList(int** matrix,int rows, int cols, ListThree** head, Three** arr)
{
int i, j, counter = 0;
Three three;
for (i = 0; i < rows; i++)
{
for (j = 0; j < cols; j++)
{
if (matrix[i][j] == i + j)
{
counter++;
three = createThree(matrix[i][j],i,j);
*head = createThreeList(head,three);
}
}
}
*arr = createThreeArr(arr,head,counter);
return counter;
}
谢谢大家,如果你们想让我提供更多信息,请告诉我。我希望这不是一个愚蠢的问题(
具有
typedef struct ListThree { struct Three data; struct List* next; }ListThree;
和
Three* createThreeArr(Three** arr, ListThree** head, int counter) { int i = 0; ListThree* pIndex = *head;
在createThreeArr中的分配
pIndex = pIndex->next;
无效,因为pIndex->next
值为struct List*
而不是ListThree*