[英]Unhandled exception Access violation writing location 0xCDCDCDCD - in Structure C++
我創建了一個結構指針。 並為其分配值。 我試圖打印分配給它的值。 它抱怨未處理的異常訪問沖突寫入位置0xCDCDCDCD。 這樣做怎么了? 如何毫無例外地完成這項任務?
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;
}
您的結構包含一個std::string
元素。 創建該對象時,該類型需要執行其構造函數 。
您無法使用malloc
創建結構,因為該C函數不了解構造函數。
C ++的new
和delete
表達式將做正確的事情。 當然,您確實應該更喜歡使用智能指針,而不是手動進行內存管理(或者完全不進行動態分配)。
修復代碼的快速方法是使用new
和delete
:
ABC *abc = new ABC;
...
delete abc;
不要使用malloc,請使用新的std :: unique_ptr。 Malloc不要調用ABC構造函數,因此也不會調用字符串構造函數。
首先,您應該使用free()
而不是delete
來釋放abc
指向的內存。
delete
運算符只能與new
運算符一起使用。
其次,最有可能是由於使用delete
之后的第二個print語句而導致此錯誤。
釋放位置的內存后,您不應以任何方式對其進行訪問,因為操作系統可能會回收它,並且您可能再也無法訪問它。 訪問沖突錯誤表示操作系統提供的安全性,可防止未經授權的進程訪問內存。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.