繁体   English   中英

C++ 动态内存错误

[英]C++ Dynamic Memory Error

这是我的代码

int main()
{
    char *something = new char[10];
    something = "test";

    cout << something;

    delete[] something;
    return 0;
}

当我调试它时,它会打开应用程序并给我一个错误窗口,说 Debug Assertion Failed: _CrtlsValidHeapPointer(block)

谢谢你。

在这种情况下, something是指向字符的指针。 在第二行中,您将something的值更改为指向“test”的第一个字符,而不是您所期望的,即将“test”放在something指向的内存中。

当您delete您试图删除“测试”所在的内存,它是只读内存。

一般来说,您应该考虑将std::stringC++ 如果您出于其他原因使用char * ,请查看strcpystrncpy

something = "test";

将您的指针分配给使用静态存储分配文字分配的地址。 动态分配的原始指针丢失。

要复制内容,请使用std::copy()

您需要使用 strcpy 将“test”复制到您的数组中。

strcpy(something, "test"); // or even better user strncpy

相反,你有:

something = "test";

关于用新地址覆盖存储在 something 变量中的指针的代码。 编译器生成的字符串常量的地址。 然后 delete [] 作用于这个不指向 new 返回的动态分配内存的新地址。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM