C++ 未处理的异常访问冲突写入位置0xCDCD-在结构C++;

C++ 未处理的异常访问冲突写入位置0xCDCD-在结构C++;,c++,C++,我创建了一个结构指针。并为其赋值。我试图打印分配给它的值。它抱怨未处理的异常访问冲突写入位置0xCDCDCD。这样做有什么不对?如何毫无例外地完成这项任务 StructCol.h #include "stdafx.h" #ifndef StructCol_H #define StructCol_H #include<string> using namespace std; struct ABC { string test; int no; void

我创建了一个结构指针。并为其赋值。我试图打印分配给它的值。它抱怨未处理的异常访问冲突写入位置0xCDCDCD。这样做有什么不对?如何毫无例外地完成这项任务

StructCol.h

#include "stdafx.h"
#ifndef StructCol_H
#define StructCol_H

#include<string>

using namespace std;

struct ABC
{
    string test;
    int no;

    void print()
    {
        cout << test << endl;
        cout << no << endl;
    }
};

#endif

StructTest2.cpp

#include "stdafx.h"
#include<conio.h>
#include<iostream>
#include<stdio.h>
#include "StructCol.h"

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
    ABC*abc = (ABC*)malloc(sizeof(ABC));
    abc->no = 47;
    abc->test = "fyp";
    abc->print();
    //delete abc;
    //abc->print();

    _getch();
    return 0;
}
StructCol.h
#包括“stdafx.h”
#ifndef结构
#定义结构
#包括
使用名称空间std;
结构ABC
{
串试验;
国际贸易编号;
作废打印()
{
不能打印();
_getch();
返回0;
}

首先,您应该使用
free()
而不是
delete
来释放
abc
指向的内存

delete
运算符只能与
new
运算符一起使用

其次,出现此错误的原因很可能是使用
delete
后的第二条print语句


释放某个位置的内存后,您不应以任何方式访问该位置,因为操作系统可能会回收该位置,而您可能无法再访问该位置。访问冲突错误表示操作系统提供了安全性,以防止未经授权的进程访问内存。

不要使用malloc,请使用新的ou std::unique\u ptr.malloc不要调用ABC构造函数,这样字符串构造函数就不会被调用。

您的结构包含一个
std::string
元素。该类型需要在创建对象时执行其构造函数

不能使用
malloc
创建结构,因为C函数不知道构造函数

<> C++ > <代码> < <代码> >代码>删除>代码>表达式将做正确的事情。当然,你应该更喜欢使用智能指针而不是手动内存管理(或者根本没有动态分配)。 修复代码的快捷方法是使用
new
delete

ABC *abc = new ABC;
...
delete abc;