簡體   English   中英

動態為char *分配內存時出錯

[英]An error when dynamically allocating memory for a char*

因此,主要問題是代碼中存在運行時錯誤:

char *wordBank[]= {new char[numWords+1]};
char  buffer1[41];

for(int i=0; i<numWords;i++){
    ifile >> buffer1;
    int len = strlen(buffer1);
    cout << buffer1<<"and"<<len <<endl;
    wordBank[i] = new char[len + 1];
    strncpy(wordBank[i], buffer1,len);
    cout << wordBank[i]<<"and"<<len <<endl;
}

它開始弄亂wordBank中的內容了嗎? 它將單詞從txt文件獲取到buffer1,然后將其復制到wordBank的動態分配的char *數組中。 但是,我總是會遇到細分錯誤,並且所有單詞都不正確。 我做錯了什么?

您可以使用C ++而不是C簡化代碼:

vector<string> wordBank(numWords);
string buffer1;
for (int i = 0; i < numWords; i++) {
  ifile >> buffer1;
  size_t len = buffer1.length();
  cout << buffer1 << "and" << len << endl;
  wordBank[i] = buffer1;
  cout << wordBank[i] << "and" << len << endl;
}

甚至更簡單,但添加了錯誤檢查:

vector<string> wordBank(numWords);
for (int i = 0; i < numWords; i++) {
  if (ifile >> wordBank[i])
    cout << wordBank[i] << "and" << len << endl;
  else { // no more words
    wordBank.resize(i); // chop off the unused portion
    break;
  }
}

這行是錯誤的:

char *wordBank[] = {new char[numWords+1]};

wordBank是一個包含一個元素的數組,該元素的值是一個指向具有numWords+1字符的字符數組的指針。 當您訪問wordBank[1]您將超出數組的范圍,這將導致未定義的行為。

您顯然想要的是:

char **wordBank = new char*[numWords];

這將創建一個由numWords char*元素動態分配的數組,然后將其分配給for循環。

我看不到需要numWords+1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM