使用指针分配内存

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的新手.

Lem*_*rop 5

当你说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)