gpt4 book ai didi

c - 局部变量的数据突然损坏

转载 作者:行者123 更新时间:2023-11-30 15:16:05 24 4
gpt4 key购买 nike

我正在使用自定义函数连接几个字符串。这些函数工作正常,我得到了正确的值,但在几个语句之后,字符指针中的值被损坏。我不明白这背后的原因。下面是一个更大的函数的一部分。我只是提供代码,直到发生损坏为止

char* my_strcpy(char*dest, const char* src, int hasLen, int length) {
if (!hasLen) {
while ((*dest = *src++))
++dest;

} else {
while (length-- && (*dest = *src++))
++dest;
}
return dest;
}
int addSubscriptionInCache(subs_t* subs, str* pres_uri, int read_response) {

redisReply *reply;

char temp_key[1] = "";
char *tk = my_strcpy(temp_key, "", 0, 0);
char *subs_cache_key = tk;

char temp_value[1] = "";
char *tv = my_strcpy(temp_value, "", 0, 0);
char *subs_cache_value = tv;

tk = my_strcpy(tk, SUBSCRIPTION_SET_PREFIX, 0, 0);
tk = my_strcpy(tk, "-", 0, 0);
tk = my_strcpy(tk, subs->pres_uri.s, 0, 0);
tk = my_strcpy(tk, ":", 0, 0);
tk = my_strcpy(tk, subs->event->name.s, 0, 0);
*tk = '\0';

// this prints correctly.
printf("subs_cache_key: %d %s \n", strlen(subs_cache_key), subs_cache_key);

int subs_cache_value_len = subs->callid.len + subs->to_tag.len + 1; // add 1 for :

tv = my_strcpy(tv, subs->to_tag.s, 1,subs->to_tag.len);
tv = my_strcpy(tv, ":", 0, 0);
tv = my_strcpy(tv, subs->callid.s, 1,subs->callid.len);
*tv= '\0';
// this prints correctly.
printf("subs_cache_value: %d %s \n", strlen(subs_cache_value), subs_cache_value);

//add in pipeline
redisAppendCommand(redis_context, "SADD %s %s", subs_cache_key, subs_cache_value))
//set expires
redisAppendCommand(redis_context, "EXPIRE %s %d", subs_cache_key, subs->expires);

// create hash for to_tag:call_id
int argc = 0;
char *arvg[22];
size_t argvlen[22];
// this prints fine.
printf("Before corruption: %s", subs_cache_value);
arvg[argc] = "HMSET";
// below prints corrupted values
printf("After corruption: %s", subs_cache_value);
printf("After corruption: %s", subs_cache_key);
argvlen[argc] = 5;
argc++;

arvg[argc] = subs_cache_value;
argvlen[argc] = subs_cache_value_len;
argc++;

.......
//rest of the code
}

我正在使用自定义函数,这样就不会一次又一次地遍历整个字符串。

请帮助我了解我的行为是否会导致腐败发生。

谢谢

最佳答案

你有

char temp_key[1] = "";
char *tk = my_strcpy(temp_key, "", 0, 0);

并在后续调用 my_strcpy 中继续使用 tk

问题是您没有足够的内存。使用超出有效限制的内存会导致未定义的行为。

使用类似的东西:

char temp_key[1000] = "";  // Make the size large enough for
// the kinds of strings you are
// expecting to see.

同样,使用:

char temp_value[1000] = "";

关于c - 局部变量的数据突然损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33228615/

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