关于一个缓冲区溢出的问题

问题

我在力扣上遇到了一个问题

img

但是我在vs上运行是没有任何问题的

img

但是vs也跟我说p缓冲区溢出

img

用代码块功能插入代码

这是vs的代码

#include 
#include 
#include 
#include 
#include 

char** fizzBuzz(int n, int* returnSize);

int main() {
    int n = 0;
    int len = 0;
    int ret = 0;
    char** p = NULL;
    int* returnSize = &len;
    scanf_s("%d", &n);
    p = fizzBuzz(n, returnSize);
    for (ret = 1; ret < len; ret++) {
        printf("%s ", p[ret]);
    }
    return 0;
}

char** fizzBuzz(int n, int* returnSize) {
    *returnSize = n + 1;
    char** p = (char**)malloc(sizeof(char*) * (n + 1));
    int ret = 0;
    for (ret = 1; ret <= n; ret++) {
        if (ret % 3 == 0 && ret % 5 == 0) {
            p[ret] = "FizzBuzz";
        }
        else if (ret % 3 == 0) {
            p[ret] = "Fizz";
        }
        else if (ret % 5 == 0) {
            p[ret] = "Buzz";
        }
        else {
            p[ret] = "i";
        }
    }
    return p;
}

这是leetcode的代码

/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
char ** fizzBuzz(int n, int* returnSize){
    *returnSize = n + 1;
    char **p = (char**)malloc(sizeof(char*) * (n + 1));
    int ret = 0;
    for(ret = 1;ret <= n;ret++){
        if(ret % 3 == 0 && ret % 5 == 0){
            p[ret] = (char*)malloc(sizeof(char) * 9);
            p[ret] = "FizzBuzz";
        }else if(ret % 3 == 0){
            p[ret] = (char*)malloc(sizeof(char) * 5);
            p[ret] = "Fizz";
        }else if(ret % 5 == 0){
            p[ret] = (char*)malloc(sizeof(char) * 5);
            p[ret] = "Buzz";
        }
    }
    return p;
}