始终内存泄漏,力扣第六题

力扣第六题始终在报内存泄露,但我实在找不到问题出在哪里,求看
题目为:
将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。

比如输入字符串为 "PAYPALISHIRING" 行数为 3 时,排列如下:

P A H N
A P L S I I G
Y I R
之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"PAHNAPLSIIGYIR"。

请你实现这个将字符串进行指定行数变换的函数:

string convert(string s, int numRows);

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/zigzag-conversion
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

char * convert(char * s, int numRows){
    int len=strlen(s);
    char **line = (char **)malloc(sizeof(char*)*numRows);
    for(int i=0;iline[i]=(char*)malloc(sizeof(char)*1001);
        memset(line[i],0,sizeof(char)*1001);
        // for(int j=0;j<1001;j++){
        //     line[i][j]=0;
        // }
    }//ok
    int flag=0;//flag=0向下,flag=1向上
    int col[numRows];//col数组用于记录各line记录到第几列
    int row=0;//row用于记录line记录到第几行,row初值为0
    for(int i=0;i0;//col[]初值都为0
    }
    for(int i=0;iline[row][col[row]]=s[i];
       col[row]++;
       if(numRows==1){
         row=0;
       }else{
         if(row==numRows-1&&flag==0) flag=1;//边界:numRows=1if(row==0&&flag==1) flag=0;
         if(flag==0&&row!=numRows-1){//向下
            row++;
         }else if(flag==1&&row!=0){//向上
            row--;
         }
       }//else
    }//for
    char *res=(char*)malloc(sizeof(char)*len);
    for(int i=0;i0;
    }
    int number=0;
    for(int i=0;iint j=0;
        while(line[i][j]!=0){
            res[number]=line[i][j];
            j++;
            number++;
        }
    }
    return res;
}

没有free

尝试一些下面的代码,看看行不行,如果可以请点击采纳:

class Solution {
    public String convert(String s, int numRows) {
        if (numRows == 1) return s;
        int len = s.length();
        int cycleLen = 2 * numRows - 2;
        StringBuilder res = new StringBuilder();
        for (int i = 0; i < numRows; i++) {
            for (int j = 0; j + i < len; j += cycleLen) {
                res.append(s.charAt(j + i));
                if (i != 0 && i != numRows - 1 && j + cycleLen - i < len) {
                    res.append(s.charAt(j + cycleLen - i));
                }
            }
        }
        return res.toString();
    }
}