问题描述
我有一个2D数组,像这样:
char * array[2][2];
我希望它存储char *
,所以我尝试使用以下方法malloc()
:
for(i=0:i<2;i++){
for(j=0:j<2;j++)
{
array[i][j]=(char*)malloc(sizeof(char *)*2);
}
}
然后,我将char *
的某些元素存储在2D数组中,并且2D数组可以将它们打印出来,这很好。
然后我尝试使用以下方法取消分配2D数组:
for(i=0:i<2;i++){
for(j=0:j<2;j++){
free(array[i][j]);
}
}
运行程序时,我收到一条“ free():无效指针”消息。
我尝试使用Valgrind,它报告了我所有的分配和释放都已计入。但是,这表明我已经“绝对丢失”了一些字节。
任何观点或想法都会有所帮助。
下面是一个示例代码来演示我在说什么:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
char * r0c0 = " hello ";
char * r0c1 = " bye ";
char * r1c0 = " this ";
char * r1c1 = " is me ";
int i=0;
int j=0;
for(i=0;i<2; i++)
{
for(j=0;j<2;j++)
{
*(*(array+i)+j) = (char *)malloc(sizeof(char *)*2);
}
}
array[0][0]= r0c0;
array[0][1]= r0c1;
array[1][0]= r1c0;
array[1][1]= r1c1;
for(i=0;i<2;i++)
{
for(j=0;j<2;j++)
{
printf("%s\t",array[i][j]);
}
printf("\n");
}
for(i=0;i<2; i++)
{
for(j=1;j>=0;j--)
{
free(*(*(array+i)+j));
}
}
return EXIT_SUCCESS;
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)