讨论/题目交流/C语言全局指针初始化随机问题/
C语言全局指针初始化随机问题
typedef struct node  {
    struct node *l;
    struct node *r;
    int value;
    int count;
};
struct node *root = NULL;
int *ret = NULL;
int* countSmaller(int* nums, int numsSize, int* returnSize){
    int k;	
    for (k = 0; k < numsSize; k++)
        insert(k, nums[k], 0, &root);
    ret = (int *)malloc(sizeof(int) * numsSize);
    printf("root:0x%08x, ret:0x%08x\n",root, ret);
    do_work(0, root);
    *returnSize = numsSize;	
    return ret;
}

以上代码屏蔽了实际代码

提交后第一个测试用例是:[],也就是输入的numsSize=0
这样期望root仍然为空,实际发现root=0x00000004,导致遍历二叉树访问异常,程序崩溃。调试模式输入同样用例是通过的。

修改在插入二叉树前,函数入口赋值root=NULL后,代码顺利通过。

全局初始化为空的指针,为什么实际运行后不为空了?
推测原因:判题框架一次性跑所有用例,连续多次调用解题函数,所以该指针被上一用例污染,显示错误1/16,也并不能说明是第一个用例。

展开讨论
共 0 个讨论
无讨论