使用malloc设置字符串数组,然后清除它
我想使用malloc创建一个字符串数组,然后清除所有分配的内存,我相信我使用malloc是正确的,但我无法理解当我试图清除它时我做错了什么:使用malloc设置字符串数组,然后清除它,c,arrays,malloc,C,Arrays,Malloc,我想使用malloc创建一个字符串数组,然后清除所有分配的内存,我相信我使用malloc是正确的,但我无法理解当我试图清除它时我做错了什么: #include <stdlib.h> #include <stdio.h> #include <string.h> void print_arr(char* arr[]); void clear_arr(char* arr[], int size); int main() { int number = 10;
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
void print_arr(char* arr[]);
void clear_arr(char* arr[], int size);
int main()
{
int number = 10;
char **myarr = malloc((number+1)*sizeof(char*));
for (int i = 0; i <= number; i++)
{
myarr[i]=NULL;
}
for (int i = 0; i < number; i++)
{
char str[] = "word";
int len = strlen(str);
myarr[i]=malloc((len+1)*sizeof(char));
strcpy(myarr[i], str);
}
print_arr(myarr);
clear_arr(myarr, number);
print_arr(myarr);
free(myarr);
return 0;
}
void print_arr(char* arr[])
{
for (int i = 0; arr[i] != NULL; i++)
{
printf("%s\n",arr[i]);
}
}
void clear_arr(char* arr[], int size)
{
for (int i = 0; i < size; i++)
{
free(arr[i]);
}
}
看起来只有数组的第一个“单元”被释放,而另一个没有受到影响。我的clear_arr功能有什么问题?
我正在使用VScode进行编译,如果这很重要的话…那是因为你试图打印你想要的东西。
free
函数取消分配内存,但数组中仍有地址
您可以做的是:
void clear\u arr(字符*arr[],整数大小)
{
对于(int i=0;i
这样,print函数就不会在一个自由指针数组中循环
有一种更好的方法可以malloc和复制字符串,您可以使用函数strdup
您的代码可以通过以下方式进行优化:
int number=10;
字符**myarr=malloc((数字+1)*sizeof(字符*);
for(int i=0;i
我知道我正在尝试打印已释放的内容,但我想知道为什么只有第一个条目看起来已释放:打印乱码,其余条目打印字符串。当您尝试访问空闲内存时,行为未定义。也许你的数据仍然存在,也许另一个程序使用这个内存并在其中写入其他数据,任何事情都可能发生,因为它不是你的内存。
word
word
word
Pi╛
word
word