c - 如何确保 malloc 和 free 中没有遗漏某些内容?

标签 c malloc dynamic-allocation

char **test() {
    char **res = (char **)malloc(sizeof(char *) * 5);
    for (int cur = 0; cur < 3; cur++) {
        char *str = (char *)malloc(10);
        strcpy(str, "Maneger");
        res[cur] = (char *)malloc(strlen(str));
        strcpy(res[cur], str);
        free(str);
    }
    res[3] = NULL;
    return res;
}

int main(int argc, char *argv[]) {
    char **li = test();
    //some code
    free(li);
    return 1;
}

free() 有什么问题吗?在上面的代码中。正确吗?

最佳答案

您忘记为终止空字符分配空间。

线路

res[cur]=(char *)malloc(strlen(str));

应该是

res[cur]=(char *)malloc(strlen(str) + 1);

还应添加检查 malloc() 的返回值是否为 NULL

关于c - 如何确保 malloc 和 free 中没有遗漏某些内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45771732/

相关文章:

c - 在 C 中为 ffmpeg 动态生成参数列表

c - 为什么我在 C 中动态分配的结构数组不工作?

c - free() 是如何工作的?

c - 打开源和目的地之间的UDP套接字,修改它并将其转发到原始目的地

sql - 有谁知道为什么我的立即执行不能在 PRO*C 中编译?

c++ - 如何在 C++ 中使用 new 分配内存?

C - 在结构内动态分配结构的循环缓冲区

c - Unix - 共享内存

c - 在 C 中处理错误和释放内存的正确方法

c - 无论 malloc 大小如何,strcpy 都能正常工作吗?