在c中实现字符串队列:何时必须使用malloc
我尝试在c中实现字符串队列 (使用数组排队) 但我的代码中有一个未知的苍蝇 1) 我尝试为队列分配一个字符串。我的逻辑错了吗在c中实现字符串队列:何时必须使用malloc,c,arrays,memory,queue,malloc,C,Arrays,Memory,Queue,Malloc,我尝试在c中实现字符串队列 (使用数组排队) 但我的代码中有一个未知的苍蝇 1) 我尝试为队列分配一个字符串。我的逻辑错了吗 static void enqueueInSearchEngineQueue(const char* res_name) { if (searchEnginesNamesQueue_ItemsCount <= SEASRCH_ENGINES_QUEUE_MAX_SIZE) { *searchEnginesNamesQueue[search
static void enqueueInSearchEngineQueue(const char* res_name) {
if (searchEnginesNamesQueue_ItemsCount <= SEASRCH_ENGINES_QUEUE_MAX_SIZE) {
*searchEnginesNamesQueue[searchEnginesNamesQueue_ItemsCount] = malloc(sizeof(*res_name));
strcpy(searchEnginesNamesQueue[searchEnginesNamesQueue_ItemsCount] ,res_name);
searchEnginesNamesQueue_ItemsCount++;
}
else
{
// freeSearchEngingeQueue();
}
}
static int existInSearchEngingeQueue(const char* res_name) {
int i = 0;
int answer = 0;
for (i; i < searchEnginesNamesQueue_ItemsCount; i++) {
if (strcmp(searchEnginesNamesQueue[i], res_name) == 0) {
answer = 1;
break;
}
}
return answer;
}
static void freeSearchEngingeQueue() {
int i = 0;
for (i; i < searchEnginesNamesQueue_ItemsCount; i++) {
free(searchEnginesNamesQueue[i]);
}
searchEnginesNamesQueue_ItemsCount = 0;
}
static void searchEnginesIcons_download_callback(const char* res_name,
int success, void *context, char *last_modified) {
if (success) {
if (!existInSearchEngingeQueue(res_name)) {
enqueueInSearchEngineQueue(res_name);
#ifdef ANDROID
DriveToNativeManager_refreshSearchEnginesIconsOnSearchActivity(res_name);
#elif defined(IPHONE)
//TODO
refreshIconsOnSearchActivity();
#endif
}
}
}
静态无效排队InQueueInSearchEngineQueue(const char*res_name){
如果(searchEnginesNamesQueue_ItemsCount是,则代码已损坏
您无法使用sizeof
检查作为const char*
传递给函数的字符串的长度,您需要调用strlen()
,并为终止符添加1,以确定内存如何malloc()
sizeof*res\u name
的值是常量,简单地说就是sizeof(char)
,即1。因此,您正在大量覆盖内存,这会导致未定义的行为。是的,您的代码被破坏
您无法使用sizeof
检查作为const char*
传递给函数的字符串的长度,您需要调用strlen()
,并为终止符添加1,以确定内存如何malloc()
sizeof*res\u name
的值是常量,仅为sizeof(char)
,即1。因此,您正在大量覆盖内存,这会导致未定义的行为。这看起来是错误的:
*searchEnginesNamesQueue[searchEnginesNamesQueue_ItemsCount] = malloc(sizeof(*res_name));
您没有显示类型定义,但是前导的*
非常可疑。您真的想取消对它的引用吗?如果是故意的,那么在下面的一行和其他地方似乎缺少它
另外,这不是获取字符串长度的方法。请改用strlen
试试这个:
searchEnginesNamesQueue[searchEnginesNamesQueue_ItemsCount] = malloc(strlen(res_name)+1);
这似乎是错误的:
*searchEnginesNamesQueue[searchEnginesNamesQueue_ItemsCount] = malloc(sizeof(*res_name));
您没有显示类型定义,但是前导的*
非常可疑。您真的想取消对它的引用吗?如果是故意的,那么在下面的一行和其他地方似乎缺少它
另外,这不是获取字符串长度的方法。请改用strlen
试试这个:
searchEnginesNamesQueue[searchEnginesNamesQueue_ItemsCount] = malloc(strlen(res_name)+1);
您需要检查代码中的类型,“引擎”的拼写在多个位置处于关闭状态。您需要检查代码中的类型,“引擎”的拼写在多个位置处于关闭状态。