将数组内容从一个复制到另一个(动态内存分配)

时间:2017-09-21 13:24:34

标签: c

在我下面粘贴的代码中,在我将分割数据i,e“he”,“ll”和“oo”的内容复制到新数据数组(这是2d数组)之后。我正在释放StringSplit [i]。但在释放后,我无法看到我复制到2d数组newData的数据。这段代码中发生了什么,以及如何确保保存变量“newData”中的数据。和newData是全局变量

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>

int main() 
{
    char *data= "Helloo";
    StringOperations(data);
    return 0;
}

2 个答案:

答案 0 :(得分:0)

您的代码存在两个严重问题,

  1. 中的字符串总是还有一个字节,所以你应该有

    int const_length = 3;
    
  2. free() StringSplit[i]然后取消引用您之前分配给它的指针。指针就是这样,它们指向记忆。将指针指定给另一个指针不会创建新内存,并且您取消引用与free()编辑完全相同的内容。

  3. 不是那么严重,但您应该检查malloc()是否返回有效的非NULL指针。

  4. 根本不严重,但会投放malloc() is considered bad practice的返回值。

答案 1 :(得分:-1)

newData[j]=StringSplit[i];

newData[j]指的是StringSplit[i]所在的位置。因此,有效地释放两个指向的内存。