C 分配给类型'时不兼容的类型;字符*[12]和#x27;从类型';int';

C 分配给类型'时不兼容的类型;字符*[12]和#x27;从类型';int';,c,memory,malloc,C,Memory,Malloc,我有一个char* #define SEASRCH_ENGINES_QUEUE_MAX_SIZE 12 static char* searchEnginesNamesQueue[SEASRCH_ENGINES_QUEUE_MAX_SIZE]; 我想在释放其内存后使其无效: searchEnginesNamesQueue=NULL 但我得到了这个错误: 从类型“int”分配给类型“char*[12]”时,不兼容的类型是数组,不能分配给数组 此外,您不能“释放其内存”,不能释放数组,只能释放动态

我有一个
char*

#define SEASRCH_ENGINES_QUEUE_MAX_SIZE  12
static char* searchEnginesNamesQueue[SEASRCH_ENGINES_QUEUE_MAX_SIZE];
我想在释放其内存后使其无效:

searchEnginesNamesQueue=NULL

但我得到了这个错误:


从类型“int”分配给类型“char*[12]”时,不兼容的类型是数组,不能分配给数组

此外,您不能“释放其内存”,不能释放数组,只能释放动态分配的(“堆”)内存

如果您的意思是数组中存储了堆内存指针,这些指针随后被释放,则必须将数组中的每个指针设置为
NULL

for(int i = 0;
    i < sizeof searchEnginesNamesQueue / sizeof *searchEnginesNamesQueue;
    ++i)
{
  searchEnginesNamesQueue[i] = NULL;
}
for(int i=0;
i
不用大括号就可以轻松编写循环,但我必须将标题放在多行上,以避免水平滚动


请注意,巧妙地使用了
sizeof
让编译器计算循环边界。

这是一个数组,不能为其分配数组

此外,您不能“释放其内存”,不能释放数组,只能释放动态分配的(“堆”)内存

如果您的意思是数组中存储了堆内存指针,这些指针随后被释放,则必须将数组中的每个指针设置为
NULL

for(int i = 0;
    i < sizeof searchEnginesNamesQueue / sizeof *searchEnginesNamesQueue;
    ++i)
{
  searchEnginesNamesQueue[i] = NULL;
}
for(int i=0;
i
不用大括号就可以轻松编写循环,但我必须将标题放在多行上,以避免水平滚动


注意,巧妙地使用了
sizeof
让编译器计算循环边界。

基本上NULL是一个整数,而searchEnginesNamesQueue是一个字符指针数组。你不能这样分配它。尝试将char pointer的值设置为NULL,可能如下所示*char=NULL。

基本上NULL是一个整数,而searchEnginesNamesQueue是一个字符指针数组。你不能这样分配它。请尝试将char指针的值设置为NULL,可能是这样的*char=NULL。

数组不可分配。数组不可分配。为什么不
free(searchEnginesNamesQueue[i])
?因此,如果我想有一个标志,表示数组中的指针被释放,我必须添加布尔值?我曾想过使用
array=NULL
,但这不是一个选项为什么不
free(searchEnginesNamesQueue[I])
?因此,如果我想有一个标志,表示数组中的指针被释放,我必须添加布尔值?我曾想过使用
array=NULL
,但这不是一个选项我尝试过
searchEnginesNamesQueue=(char*)NULL
unsuccessfully*searchEnginesNamesQueue=NULL我已经尝试了
searchEnginesNamesQueue=(char*)NULL未成功*searchEnginesNamesQueue=NULL