gpt4 book ai didi

c malloc 在其他函数和结构中

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

我在使用 c 和指针时遇到问题。我一直在努力,它必须很容易。我有一个结构,我在一个函数中分配,然后将指针传递回原始函数。但是当我尝试用其他变量填充结构的值,然后打印或复制它们时,应用程序段错误说内存地址超出范围。

struct memcache_buffer{
int elements, action;
char keys[MAX_KEYS], values[MAX_KEYS], returns[MAX_KEYS]; //action 0 = delete , 1 = get 2 = set
}memcache_buffer;

struct memcache_buffer* memcache_allocate_buffer(int size){
struct memcache_buffer *buffer;
buffer =malloc(sizeof(struct memcache_buffer));
return buffer;
}

void memcache_set(char * key, char * value){
pthread_t process_t;
struct memcache_buffer *buffer=memcache_allocate_buffer(1);
char keys,values;
buffer->elements = 1;
buffer->action=2;
//printf("crash?\n");
printf("%s %s",key,value);
snprintf(buffer->keys[0],KEY_SIZE,"%s",key);
snprintf(buffer->values[0],VALUE_SIZE,"%s",value);
pthread_create(&process_t,NULL,memcache_process,buffer);
}

我分配的内存对吗?分配内存和这些指针肯定很粗糙,尤其是过去只会弄乱 php。

最佳答案

这是你的问题:

struct memcache_buffer{
char keys[MAX_KEYS], values[MAX_KEYS]
}

snprintf(buffer->keys[0],KEY_SIZE,"%s",key);
^^^
snprintf(buffer->values[0],VALUE_SIZE,"%s",value);
^^^

删除 [0]snprintf 将尝试取消引用一些虚假值。

关于c malloc 在其他函数和结构中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10024376/

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