簡體   English   中英

未處理的異常訪問沖突寫入位置0xCDCDCDCD-在Structure C ++中

[英]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 ++的newdelete表達式將做正確的事情。 當然,您確實應該更喜歡使用智能指針,而不是手動進行內存管理(或者完全不進行動態分配)。

修復代碼的快速方法是使用newdelete

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM