微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Free() 安全复制的字符串数组崩溃?

如何解决Free() 安全复制的字符串数组崩溃?

我正在尝试在 SoC 平台(裸机应用程序)上运行以下 C 程序。

我有几个字符串数组,定义为

char *init_array[] = { "foo","bar bar" }

我知道这是一个字符数组:*init_array[0] 返回 'f' 字符,init_array[0] 返回“foo”的第一个地址,&init_array[0] 返回第一个地址所在的地址“foo”的被保存。我使用的程序基于该定义,因此我不应该更改它。

那些数组将进入一个循环,其中可能会或可能不会发生外部更改。在接下来的迭代中,数组不得携带“错误”。

我得到的解决方案之一是保留这些数组的两个副本,一个是我要使用的副本,另一个是将初始化它们的副本。

显然,这必须是“安全复制”,以避免使用相同的地址。我使用以下代码实现了这一点:

char *my_array[2];

for (int i = 0; i < 2; i++) {

        my_array[i] = malloc(strlen(init_array[i]) + 1);

        memcpy(my_array[i],init_array[i],strlen(init_array[i]) + 1);

    }

此处使用 malloc()(如果可能的话,我宁愿避免)要求在每次迭代结束时使用 free():

for (int i = 0; i < 2; i++) {

// i kNow it crashes somewhere here

    free(my_array[i]);
    my_array[i] = NULL; //this is supposed to tackle the issue of the same pointer being freed twice(?)

它可以完美运行,只需少量迭代。然后,程序崩溃了,我必须重置我正在使用的平台。正如我上面提到的,我知道它在最后一个循环中的某个地方崩溃了。 我也读过:

malloc()、calloc()、realloc() 或 free() 中的崩溃几乎总是 与堆损坏有关,例如溢出分配的块或 两次释放同一个指针。

我真的不知道我做错了什么。这是一个堆损坏问题,我该如何处理,还是我从一开始就错了?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。