gpt4 book ai didi

c - 在 c : when do I have to use malloc 中实现字符串队列

转载 作者:太空宇宙 更新时间:2023-11-04 07:26:57 25 4
gpt4 key购买 nike

我尝试用 c 语言实现一个字符串队列。

(使用数组排队)

但是我的代码中出现了一只未知的苍蝇。

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) 来 self 代码其他部分的回调填满了队列。

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

最佳答案

是的,您的代码已损坏。

您不能使用 sizeof 检查作为 const char * 传递给函数的字符串的长度,您需要调用 strlen(),并为终止符加 1 以计算内存如何分配给 malloc()

sizeof *res_name 的值是常量,只是 sizeof (char),即 1。所以你正在疯狂地覆盖内存,这会导致未定义的行为。

关于c - 在 c : when do I have to use malloc 中实现字符串队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17529544/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com