- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我对使用 C++ 的 OOP 有点陌生,所以我希望我只是犯了一些简单的初学者错误。我有一些代码给我看似莫名其妙的 malloc 错误。我已将我的代码减少到仍然会崩溃的最小部分,即:
我的类.cpp:
#include <vector>
using std::vector;
#include <string>
using std::string;
class MyClass{
string * myString1;
string * myString2;
int length1;
int length2;
vector< vector<int>* > * myVector;
public:
MyClass(string * a, string * b);
};
MyClass::MyClass(string * a, string * b)
: myString1(a), myString2(b)
{
// commenting both of the lines that access the string sizes
// makes it work
length1 = myString1->size();
// commenting either or both of the following lines makes
// it work
length2 = myString2->size();
myVector = new vector< vector<int>* >;
}
我的类.h
#ifndef MyClass_H
#define MyClass_H
#include <string>
using std::string;
class MyClass{
public:
MyClass(string * a, string * b);
};
#endif
测试.cpp:
#include "../include/MyClass.h"
#include <string>
using std::string;
int main()
{
string * A = new string("foobar");
string * B = new string("foobaz");
MyClass * mc = new MyClass(A, B);
return 0;
}
我正在这样编译:
g++ -ggdb -Wall -c src/test.cpp -o .objects/test.o
g++ -ggdb -Wall -c src/MyClass.cpp -o .objects/MyClass.o
g++ .objects/test.o .objects/MyClass.o -ggdb -Wall -o test
当我运行它时,我得到了这个:
test: malloc.c:3097: sYSMALLOc: Assertion `(old_top == (((mbinptr) (((char *) &((av)->bins[((1) - 1) * 2])) - __builtin_offsetof (struct malloc_chunk, fd)))) && old_size == 0) || ((unsigned long) (old_size) >= (unsigned long)((((__builtin_offsetof (struct malloc_chunk, fd_nextsize))+((2 * (sizeof(size_t))) - 1)) & ~((2 * (sizeof(size_t))) - 1))) && ((old_top)->size & 0x1) && ((unsigned long)old_end & pagemask) == 0)' failed.
Aborted
我看到有人建议将 valgrind 作为调试此类问题的工具,但我无法从它的输出中理解任何内容。输出很长,所以我粘贴了它here .
Gdb 指出创建新 vector 的那一行是问题所在(这并不奇怪)。完整的 gdb 输出是 here .我觉得奇怪的是,如果我不访问任何一个字符串长度,那么新 vector 的创建就没有问题。
我真的很茫然,任何帮助将不胜感激!
最佳答案
主要问题是你定义了MyClass
以两种不兼容的方式:在 MyClass.cpp
中,它有五个数据成员(两个指针、两个整数和另一个指针),但在 MyClass.h
中,因此在 test.cpp
, 它根本没有数据成员。因此,当您的 main
函数调用 new MyClass(A, B)
, 系统只为 MyClass
的无数据成员版本分配足够的内存,然后它调用构造函数,该构造函数初始化您没有为其分配内存的数据成员。
您需要从 MyClass.cpp
移动您的类定义至 MyClass.h
, 以及 MyClass.cpp
的第一行应该是 #include "MyClass.h"
.这将确保您没有任何不兼容性,因为它会导致 MyClass.cpp
如果你这样做会发出编译错误。
关于c++ - malloc.c :3097: sYSMALLOc: Assertion fails inside constructor of dynamically created object,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9269566/
我希望有人能帮助我理解我哪里出了问题。我正在实现一个程序来检查拼写正确性。在此过程中,我使用 trie 数据结构将字典文本文件加载到内存中以检查单词。 总体而言,它似乎按预期运行,但在加载尽可能长的单
我在运行 C 程序时遇到以下 sysmalloc 错误。 malloc.c:3096: sYSMALLOc: Assertion `(old_top == (((mbinptr) (((char *)
sysmalloc: Assertion `(old_top == initial_top (av) && old_size == 0) || ((unsigned long) (old_size)
我编写了一个代码来将新成员添加到列表中。当我添加两个成员时它工作正常。但是,一旦我添加第三个并编译并运行代码,就会出现错误。代码及错误如下: #include #include struct list
我已经为这个错误苦苦挣扎了一段时间,但我不知道出了什么问题。这是代码: //the code for the function that is being called //charset is a
我正在尝试编写一个函数,用于搜索模式的所有出现并返回文件中与该模式匹配的偏移量数组。我想使用 realloc 动态增长返回的数组,但出现 SYSMALLOC 断言错误。有时,如果我使用不同的搜索模式,
我在使用 opencv 时遇到 sysmalloc 错误。当我调试时,我发现错误发生在这里: sm = cv::Mat::zeros(h,w,img.type()); 其中h和w分别是img行和w列。
#include #include char* text1 = "This is a string."; char* text2 = "Yet another thing."; void copy
我的 C 程序出现以下消息错误: a.out: malloc.c:2369: sysmalloc: Assertion `(old_top == (((mbinptr)(((char *) &((av
下面的 C 代码在我的 mac OS X 环境中运行良好,但如果我尝试在 ubuntu 环境中运行此代码,每当我输入偶数个输入(例如“1 2”)时,我都会遇到 malloc 断言失败,但奇数输入“1
我在 C 程序上收到一条 SYSMALLOc 错误消息,我相信此错误消息与我使用过的 malloc 相关,而且我通过在 malloc 周围放置 printf 语句发现了这一点,并且它导致了问题。我看不
我正在运行这个 c++ 程序,它不断给我 sysmalloc assertion failed 错误。我正在使用 g++-4.8。 # include # include # include #
/* Dynamic Programming implementation of LCS problem */ #include #include #include #include using na
EDIT: For clarity's sake, I'll leave the question as it is. The problem seems to be that the Kameleo
我正在编写一个名为 Process 的非常简单的结构,乍一看代码似乎已正确实现,但在测试我的代码时,程序似乎一直在崩溃,无论是由于 sysMalloc 断言失败还是由于 double free() 错
我的服务器守护进程在大多数机器上运行良好,但在我得到的一台机器上: malloc.c:3074: sYSMALLOc: Assertion `(old_top == (((mbinptr) (((ch
我的函数如下: void Insert_ldb(int t){ struct node_ldb *temp_ldb1,*lastnode_ldb; temp_ldb1=root_ldb
我这辈子都搞不清楚到底发生了什么。这是我得到的错误: alloc static vecs a.out: malloc.c:2451: sYSMALLOc: Assertion `(old_top ==
我遇到了一个神秘的错误,我不知道为什么。这段代码在失败之前运行了几次,并且总是在同一点失败。 这是我的代码: assert(size > 0); int* sorted = mallo
对于学校作业,我需要跟踪 Product 类的多个实例。 在我的程序的主要部分,我正在制作一个 vector ,如下所示: std::vector> products; 在我的 main 中的特定条件
我是一名优秀的程序员,十分优秀!