- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试了解 C++ 中的指针和一流对象。我确定问题存在于我的指针分配或调用中。我想知道是否有人可以帮助我更好地理解指针以及使用静态变量/方法。
FirstClass.h
#pragma once
class FirstClassObject {
public: FirstClassObject();
FirstClassObject(int);
FirstClassObject(int, FirstClassObject);
static void next_attr();
static int attribute;
int num;
FirstClassObject *buffer;
FirstClassObject *next;
~FirstClassObject();
};
FirstClassObject.cpp
#include "FirstClass.h"
#include <stdlib.h>
#include <string>
using namespace std;
FirstClassObject::FirstClassObject(){
num = attribute;
next_attr();
};
FirstClassObject::FirstClassObject(int attr){
num = attr;
next_attr();
}
FirstClassObject::FirstClassObject(int attr, FirstClassObject object){
num = attr;
next_attr();
buffer = (FirstClassObject*) malloc(5);
memcpy(buffer,&object,1);
next = buffer;
}
void FirstClassObject::next_attr(){
attribute++;
}
FirstClassObject::~FirstClassObject(){
free(buffer);
free(next);
}
FirstClassObject_test.cpp
#include "FirstClass.h"
#include <iostream>
using namespace std;
int FirstClassObject::attribute = 0;
FirstClassObject get_next_object(FirstClassObject object){
FirstClassObject next_object;
next_object.buffer = object.next;
return next_object;
}
int main(){
FirstClassObject object;
FirstClassObject otherobject(4, object);
cout << get_next_object(otherobject).num << "these numbers should be the same " << object.num << '\n';
return 0;
}
提前致谢。
最佳答案
首先,这是错误的:
buffer = (FirstClassObject*) malloc(5);
memcpy(buffer,&object,1);
malloc() 与 new[] 不同。
您的 FirstClassObject 类型是非 POD 类型,因为它具有非平凡的析构函数。这意味着您无法使用 malloc() 正确构造它。 malloc() 所做的只是分配内存,仅此而已。您需要实际构造一个 FirstClassObject 对象,并使用 new[ ]
动态地执行此操作。
其次,malloc() 需要分配字节数。什么是 sizeof(FirstClassObject)?我打赌它不是 5(你给 malloc() 的参数)。但要点是,即使您为 malloc() 提供了正确的字节数,您也无法通过使用它来正确构造对象。
第三,因为FirstClassObject是非POD的,memcpy()的用法也不好。简而言之,memcpy() 不复制对象。要复制一个对象,您需要调用复制构造函数。
看起来您正在阅读 C 语言书籍和/或阅读 C 语言资源,而不是 C++ 书籍和资源。如果是,请暂时放下 C,从适当的来源学习 C++。如果您尝试将 C 与 C++ 混合使用(没有适当的经验),您最终会遇到诸如您的示例之类的问题。
关于c++ - 表达式 : _CrtlsValidHeapPointer(pUserData) error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22620790/
在我用 MSVC 编译后,我的程序在运行时触发断言失败:_CrtlsValidHeapPointer(pUserData),但代码对我来说看起来没问题... class A { int a;
有时 在 Debug模式 (image) 下运行我的 Qt 项目时出现“调试断言失败”错误。我不知道我哪里错了,因为编译器什么也没说,我不知道该怎么做才能找到我的错误。 我在 Windows Vist
我的 for 循环中的 memcpy 有问题 - 我需要将字符串转换为 *char: for(i=0;i<10000;i++){ char* Bchar = new char[Bi[i].le
我正在尝试了解 C++ 中的指针和一流对象。我确定问题存在于我的指针分配或调用中。我想知道是否有人可以帮助我更好地理解指针以及使用静态变量/方法。 FirstClass.h #pragma once
我在 VS2012 (C) 中编译我的代码时收到了 _CrtIsValidHeapPointer(pUserData) 消息。 我意识到我试图在指针上使用 realloc 所以当我阅读其他帖子时,许多
以下代码是用 C++ 编写的,但使用了 stdlib.h 中的 realloc,因为我对 std::vector 了解不多。 无论如何,我得到了这个奇怪的运行时错误“”_CrtIsValidHeapP
这是我第一次使用这样的网站,但我被深深地卡住了。为了完整起见,包含了随后的背景部分,因为我不确定其中描述的任何操作是否会导致我当前面临的问题。 背景 我和一位同事在 visual studio 201
在运行时我得到调试断言失败。 in dbgheap.c line 1322 expression _crtIsValidHeapPointer(pUserData) 如果我在调试器中运行,我会在下面显
我是一名优秀的程序员,十分优秀!