将字符串分配至malloc的二维char数组时不符合预期的问题排查
问题分析与修复方案
核心错误
你代码里的ret[pos] = sc;直接把栈局部变量的地址存进了结果数组,这是问题根源:
char sc[n + 1];是栈上的局部变量,它的内存仅在当前函数栈帧有效。当循环迭代结束或递归返回后,这块栈内存会被系统回收、覆盖。ret数组里存的指针指向的是已失效的内存,后续访问自然会读出乱码或不确定值。
修复代码
为每个生成的字符串分配堆内存,复制内容后再存入ret:
把ret[pos] = sc;替换成以下代码:
ret[pos] = malloc(n + 1); strcpy(ret[pos], sc);
注意事项
LeetCode的测试框架会负责释放你分配的堆内存,不用手动调用free,但必须保证每个结果字符串都分配在堆上,不能直接使用栈内存的地址。
内容的提问来源于stack exchange,提问作者Confused Coder
相关产品推荐
相关产品推荐

