我试图弄清楚为什么这段代码不能正常工作。我想为超过250,000个单词的字典文件分配内存。内存分配正常。但是,免费记忆并不存在。老实说,我不知道为什么。它在解除分配期间中断。下面是代码。 谢谢。
#include <iostream> // For general IO
#include <fstream> // For file input and output
#include <cassert> // For the assert statement
using namespace std;
const int NumberOfWords = 500000; // Number of dictionary words
//if i change to == to exact number of words also doesnt work
const int WordLength = 17; // Max word size + 1 for null
void allocateArray(char ** & matrix){
matrix = new char*[NumberOfWords];
for (int i = 0; i < NumberOfWords; i++) {
matrix[i] = new char[WordLength];
// just to be safe, initialize C-string to all null characters
for (int j = 0; j < WordLength; j++) {
matrix[i][j] = NULL;
}//end for (int j=0...
}//end for (int i...
}//end allocateArray()
void deallocateArray(char ** & matrix){
// Deallocate dynamically allocated space for the array
for (int i = 0; i < NumberOfWords; i++) {
delete[] matrix[i];
}
delete[] matrix; // delete the array at the outermost level
}
int main(){
char ** dictionary;
// allocate memory
allocateArray(dictionary);
// Now read the words from the dictionary
ifstream inStream; // declare an input stream for my use
int wordRow = 0; // Row for the current word
inStream.open("dictionary.txt");
assert(!inStream.fail()); // make sure file open was OK
// Keep repeating while input from the file yields a word
while (inStream >> dictionary[wordRow]) {
wordRow++;
}
cout << wordRow << " words were read in." << endl;
cout << "Enter an array index number from which to display a word: ";
long index;
cin >> index;
// Display the word at that memory address
cout << dictionary[index] << endl;
deallocateArray(dictionary);
return 0;
}
答案 0 :(得分:1)
问题出在以下几行:
while (inStream >> dictionary[wordRow]) {
输入行长度没有限制,应用程序会覆盖至少一个字符串缓冲区。我会这样解决它:
while (inStream >> std::setw(WordLength - 1) >> dictionary[wordRow]) {
请不要忘记添加
#include <iomanip>
setd::setw
声明