我在这里和德语很新,所以请原谅我在这里的英语不好。 作为学校练习的一部分,我们应该为基于UNIX的系统上运行的键值存储实现带有共享内存的套接字服务器。服务器,共享内存和fork()正在工作。我们使用一个结构数组,我们为这个(put,get,delete)做了函数。在put方法中,当我们复制两个字符串时,我们得到了这个BAD_ACCESS。该方法的 代码如下,链接到我们的代码库是在这里:Github RepoBAD_ACCESS with strcpy in shared memory(C)
int put(int key, char *value, char *resp){
int emptyIndex = -1;
//strcpy(resp, "");
resp = "";
for(int i = 0; i < STORELENGTH; i++){
// If the key exists, overwrite it, give back previous value, and return true
if(kv[i].key == key) {
resp = kv[i].value;
kv[i].value = value;
return 1;
}
// If the key doesn't exist, remember the empty index
if(kv[i].key == NULL){
emptyIndex = i;
}
}
// If there was an empty index, just reuse it
if(emptyIndex > -1) {
kv[emptyIndex].key = key;
resp = "";
kv[emptyIndex].value = value;
return 1;
}
*resp = (char) "Error: Put was not successful.";
return -1;
}
正如你看到的,strcpy的,功能是注释,因为PROGRAMM立刻停止工作。 感谢您的帮助, 亚历
你觉得'* RESP =(char)的“错误:将未成功”'将完成?该投射应该暗示您做错了事,不要盲目盲目投射,以免沉默编译器警告。 –
至于你的问题,什么*是*'resp'?你传递给函数的是什么?你怎么称呼它?你能否请尝试创建一个[最小,完整和可验证示例](http://stackoverflow.com/help/mcve)并向我们展示? –
C中的参数是按值传递的,而不是引用。如果您之后立即返回,为'resp'指定一个新值是毫无意义的。你似乎对“休息”的目的是什么感到困惑。 –