Wil*_*ott 1 c++ memory pointers
我是C++的新手,尝试按照教程系列来学习语言,分配内存的挑战是为26个字符分配内存,然后用字母表填充它们,abcde ......等等.
我以为我知道解决方案,但遇到了这个错误:
Invalid address specified to RtlValidateHeap( 00490000, 0049D9EC )
让我失望的部分是程序完全执行,但是仍然会抛出此错误
这是我的代码:
char c = 'a';
char *pChar = new char[26];
for (int i = 0; i < 26; i++, pChar++, c++) {
*pChar = c;
cout << *pChar << flush;
}
delete[] pChar;
Run Code Online (Sandbox Code Playgroud)
对不起,如果问题措辞不当,我是c ++和stackoverflow的新手.
当你说delete[] pChar;
你实际上是在尝试删除pChar
当前指向的内容时,这与最初分配的位置不同.
简而言之,当你用new
它分配一些东西时,delete[26] pChar;
通常在新分配的内存的左边放置一些关于分配的数据(例如分配的大小,所以你不需要像C++那样新的说法).在尝试使用它来释放记忆时,你可能会将你所写的东西(字母表)解释为该信息,这当然不会起作用.
您应该将原始指针的副本存储到您已分配的内存中,并使用它来删除,或者可能是更好的选项,使用i
和下标通过指针算法进行索引,如:
char c = 'a';
char *pChar = new char[26];
for (int i = 0; i < 26; i++, c++) {
pChar[i] = c;
cout << pChar[i] << flush;
}
delete[] pChar;
Run Code Online (Sandbox Code Playgroud)