作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试创建一个模板类。看起来没问题,但是当我尝试创建指向 myclass 对象的指针时,发生核心转储错误。
#include <iostream>
#include <stdlib.h>
template <typename T>
class vec {
private:
T* m_pnt;
int m_dim;
public:
vec();
vec(int);
~vec();
void prnt();
void reduce(int);
void null();
void set(int, T);
void print();
};
template <typename T>
vec<T>::vec() {
m_dim = 100;
m_pnt = (T*)calloc(100, sizeof(T));
std::cout << "building without par" << std::endl;
}
template <typename T>
vec<T>::vec(int n) {
m_dim = n;
m_pnt = (T*)calloc(m_dim, sizeof(T));
std::cout << "building" << std::endl;
}
template <typename T>
vec<T>::~vec() {
free(m_pnt);
std::cout << "killed" << std::endl;
}
template <typename T>
void vec<T>::reduce(int dim) {
std::cout << "reduce" << std::endl;
if (dim <= m_dim) {
m_dim = dim;
T* p = (T*)calloc(m_dim, sizeof(T));
for (int i = 0; i != m_dim; i++)
*(p + i) = *(m_pnt + i);
free(m_pnt);
m_pnt = p;
} else {
std::cout << "error: rowvector not valid dimension" << std::endl;
throw;
}
}
template <typename T>
void vec<T>::set(int idx, T val) {
if (idx >= 1 && idx <= m_dim)
*(m_pnt + idx - 1) = val;
else {
std::cout << "error: rowvector not valid index" << std::endl;
throw;
}
}
template <typename T>
void vec<T>::prnt() {
for (int i = 0; i != m_dim; i++)
std::cout << i + 1 << "\t" << m_pnt + i << "\t" << *(m_pnt + i)
<< std::endl;
}
template <typename T>
void vec<T>::null() {
for (int i = 1; i <= m_dim; i++)
*(m_pnt + i - 1) = T(0);
}
int main() {
vec<int>* d;
std::cout << "d: " << d << std::endl;
d->prnt();
return 0;
}
编译没有报错,但是最终输出是这样的
d: 0
segmentation fault (core dumped)
最佳答案
你从未分配你的指针:
vec<int>* d = new vec<int>;
您当前的代码:
vec<int>* d;
只是定义了一个变量d
持有指向 vec<int>
的指针目的。但它指向任何地方。要使其指向某物,您必须构建一个 vec<int>
在内存中使用 new vec<int>
关于c++ - 指向类创建错误核心转储的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25186605/
我正在为我的应用程序使用 Tank-Auth。我唯一的问题是激活和重置帐户密码。 用于登录、注册、注销;我对这些代码没有问题; $route['login'] = "/auth/login"; $ro
我是一名优秀的程序员,十分优秀!