在我下面粘贴的代码中,在我将分割数据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;
}
答案 0 :(得分:0)
您的代码存在两个严重问题,
c中的字符串总是还有一个字节,所以你应该有
int const_length = 3;
您free()
StringSplit[i]
然后取消引用您之前分配给它的指针。指针就是这样,它们指向记忆。将指针指定给另一个指针不会创建新内存,并且您取消引用与free()
编辑完全相同的内容。
不是那么严重,但您应该检查malloc()
是否返回有效的非NULL
指针。
根本不严重,但会投放malloc()
is considered bad practice的返回值。
答案 1 :(得分:-1)
newData[j]=StringSplit[i];
newData[j]
指的是StringSplit[i]
所在的位置。因此,有效地释放两个指向的内存。