讨论/题目交流/求教使用c语言时屡次遇到的runtime error问题/
求教使用c语言时屡次遇到的runtime error问题

使用c语言时遇到的runtime error问题

在使用c语言做二叉树的解题时,因为返回一个数组。于是在数道题目中,屡次遇到runtime error的问题。以题目#102为例,具体报错信息如下:

Line 240: Char 15: runtime error: load of null pointer of type 'int *' (__Serializer__.c)

代码如下

int** levelOrder(struct TreeNode* root, int* returnSize, int** returnColumnSizes){
    int **nums, *column, *arr;
    struct TreeNode **queue;
    int len = 100, head, tail, i, j, qlen = 100;
    struct TreeNode *p;
    
    if (!root || !returnSize || !returnColumnSizes)
        return NULL;
    column = calloc(1, sizeof(int) * len);
    queue = calloc(1, sizeof(struct TreeNode *) * qlen);
    for (head = 0, tail = 1, i = 1, queue[0] = root, column[0] = 1; head < tail;) {
        column[i] = 0;
        /* dequeue */
        p = queue[head++];
        if (p->left) {
            queue[tail++] = p->left;
            column[i]++;
        }
        if (p->right) {
            queue[tail++] = p->right;
            column[i]++;
        }
        if (column[i])
            i++;
    }
    *returnColumnSizes = column;
    *returnSize = i;

    nums = calloc(1, sizeof(int *) * (*returnSize));
    for (i = 0, tail = 0; i < *returnSize; i++) {
        nums[i] = calloc(1, sizeof(int) * column[i]);
        for (j = 0; j < column[i]; j++)
            nums[i][j] = queue[tail++]->val;
    }
    return nums;
}

但是我使用playground进行调试时,就一起都没有问题了。增加的调试代码如下:

void dump_arr(int **nums, int row, int *column)
{
    int i, j;
    
    for (i = 0; i < row; i++) {
        for (j = 0; j < column[i]; j++)
            printf("%d ", nums[i][j]);
        printf("\n");
    }
}

int main(void) {
    int **arr, row, *column;
    struct TreeNode n[10];
    
    n[0].val = 3;   n[0].left = NULL;   n[0].right = &n[1];
    n[1].val = 5;   n[1].left = &n[2];  n[1].right = &n[3];
    n[2].val = 9;   n[2].left = NULL;   n[2].right = NULL;
    n[3].val = 8;   n[3].left = NULL;   n[3].right = NULL;
    
    puts("Hello World!");
    arr = levelOrder(n, &row, &column);
    dump_arr(arr, row, column);
    return 0;
}

请帮忙看一下,到底是什么地方出问题了。

共 1 个回复

在返回 NULL 的时候,也需要给 returnSize 和 returnColSize 设定合适的值。

1