下面的代碼在運行時在第二行拋出一個訪問衝突,這在第二次打電話給setword時發生。訪問衝突,memset
Q>我在L2中哪裏出錯了,爲什麼L1行的第一個memset沒有問題?
注意:我試圖從更大的代碼中分離出問題區域,希望能夠提供足夠的信息。
void setword(char ** word)
{
if (*word == NULL)
{
*word = (char *)malloc(30);
memset(*word, '\0', 30); //L1: OK
}
else
{
memset(*word, '\0', 30);//L2: Access violation
}
*word = "Hello";
//*word shall be freed when operations are complete.
}
int main()
{
char * word = NULL;
setword(&word); //Call 1: OK
printf("%s\n", word);
setword(&word); //Call 2: NOK!
printf("%s\n", word);
}
我只想補充說,「你好」是程序靜態數據的一部分,可能真的是隻讀內存。 OP很幸運,因爲如果不是,他會覆蓋接下來會發生的事情...... –
非常感謝。在我的原始代碼中,我沒有對* word進行任何處理,實際上我正在使用** word = some_char來填充它。但是,我已經用*詞做了一些指針運算,因爲我已經失去了原來的單詞,導致所有的失敗,就像你指出的那樣! – VivereJay