【发布时间】:2021-03-11 01:03:35
【问题描述】:
我有一个程序,我尝试在其中读取两行 40 个字符。当出现问题或程序结束时,我释放数组。
我收到一条错误消息 free(): invalid pointer Aborted (core dumped)
我认为问题出在最后一个循环,但我无法解决。
char *str = NULL;
size_t capacity = 0;
char **maska;
int rMaska=2, cMaska = 40;
maska =(char**)malloc (rMaska*sizeof(*maska));
for (int a = 0; a < rMaska; a++)
maska[a]=(char *) malloc (cMaska*sizeof(**maska));
i=0;
printf("Maska:\n");
while ( getline (&str, &capacity, stdin) != -1)
{
if (i==rMaska)
{
printf("incorrect entry.\n");
for (int i = 0; i < rMaska; i++)
free (maska[i]);
free(maska);
return 0;
}
if( strlen(str) != (unsigned int) cMaska )
{
printf("incorrect entry.\n");
for (int i = 0; i < rMaska; i++)
free (maska[i]);
free(maska);
return 0;
}
for (int i = 0; i < cMaska-1; i++)
{
if ( (str[i] != '#') && (str[i] != '.') )
{
printf("incorrect entry.\n");
for (int a = 0; a < rMaska; a++)
free (maska[a]);
free(maska);
return 0;
}
}
strcpy(maska[i], str);
i++;
}
free(str);
for (int i = 0; i < rMaska; i++)
free (maska[i]);
free(maska);
【问题讨论】:
-
str 是什么?请贴出读者可以编译的代码。
-
欢迎来到 SO。与您的问题无关,但您真的不应该使用大量同名的变量。您至少有 5 个变量称为
i。对于外层,缺少定义。 -
您的意见是什么?你什么时候收到错误信息?什么是
capacity?请提供MCVE。 -
我已经在那里添加了这些变量。
-
请注意,您有多个名为
i的变量。这很混乱。
标签: arrays c malloc free realloc