我在這裏和德語很新,所以請原諒我在這裏的英語不好。 作爲學校練習的一部分,我們應該爲基於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'指定一個新值是毫無意義的。你似乎對「休息」的目的是什麼感到困惑。 –