力扣1008题:为何声明全局变量的时候还要在函数执行的时候再次初始化呢?


/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     struct TreeNode *left;
 *     struct TreeNode *right;
 * };
 */
int pos=0;
struct TreeNode* findSubtree(int start,int end, int *preorder,int max){
    if(start==end||preorder[start]>max) return NULL;
    struct TreeNode* root=malloc(sizeof(struct TreeNode));
    root->val=preorder[start];
    //int i=start+1;
    // while(i<end&&preorder[i]val)
    // i++;
    pos++;
    root->left=findSubtree(start+1,end,preorder,root->val);
    root->right=findSubtree(pos,end,preorder,max);
    return root;
}
struct TreeNode* bstFromPreorder(int* preorder, int preorderSize){
pos=0;//为什么一定要在这里初始化pos才不会报错?不能直接初始化全局变量pos么?
return findSubtree(0,preorderSize,preorder,INT_MAX);
}

img

报错的图例
为什么一定要在 bstFromPreorder 这个函数中初始化pos才不会报错呢
第二个用例就报错了 我在测试用例那一块执行代码却不会有报错RTE
已提交他就显示RTE
感觉很奇怪

可以看下这个
https://support.leetcode.cn/hc/kb/article/1194344/
还有这个
https://blog.csdn.net/tyst08/article/details/106694382

第20行的让pos一直到最后,在bstFormPreorder里面再调一次findSubtree时,它的18行使其溢出