2013-07-08 44 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); 
相關問題