2013-07-08 46 views
0

我试图在c中实现一个字符串队列。在c中实现字符串队列我什么时候必须使用malloc

(队列使用数组)

但我得到在我的代码未知飞。

1)我尝试给队列分配一个字符串。我的逻辑错了吗?从我的代码另一部分

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 
     } 
    } 
} 

2)回调填充队列。

我以为在堆栈上使用内存,它会工作还是malloc是必须的?

+0

你需要检查你的代码的类型,“发动机”的拼写是关闭的几个地方。 – unwind

回答

2

是的,你的代码坏了。

您不能检查传递给函数的使用sizeof,你需要调用一个strlen()一个const char *字符串的长度,并添加1终结如何记忆找出该malloc()

sizeof *res_name的值是恒定的,并且简单地sizeof (char),即1.所以你似地覆盖存储器,这将导致未定义的行为。

1

这看起来错:

*searchEnginesNamesQueue[searchEnginesNamesQueue_ItemsCount] = malloc(sizeof(*res_name)); 

你没有表现的类型定义,但领先*是非常可疑。你真的想在那里解除引用吗?如果刻意的,那么它看起来像在下面的行和其他地方缺少。

另外,这不是获取字符串长度的方法。改为使用strlen

试试这个:

searchEnginesNamesQueue[searchEnginesNamesQueue_ItemsCount] = malloc(strlen(res_name)+1); 
相关问题