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