我有一个分段错误,似乎找不到它
I have a segmentation fault and cannot seem to find it
当我运行它时,我遇到了分段错误,但我不确定它在哪里。这是在 c++ 中。任何帮助表示赞赏,提前感谢
template<typename T>
void My_vec<T>::insert_at_rank(int r, const T& elem){
int init_size = size;
if(r < 0){
cerr << "Out of range"<<endl;
exit(EXIT_FAILURE);
}
else if (r <= size) {
++size;
}
else
size = r+1;
if (size > capacity) {
T* new_ptr = new T[capacity*2];
for (int i = 0; i < capacity; i++) {
new_ptr[i] = ptr[i];
}
capacity = 2 * capacity;
delete[] ptr;
ptr = new_ptr;
free(new_ptr);
}
for(int i = size-1; i > r; i--){
ptr[i] = ptr[i-1];
}
for (int i = init_size; i < r; i++) {
ptr[i] = '0';
}
ptr[r] = elem;
}
T* new_ptr = new T[capacity*2]; // allocates new array
//...
delete[] ptr; // deletes previous array that 'ptr' pointed to
ptr = new_ptr; // repoints 'ptr' to the newly allocated array
free(new_ptr); // ???
问题#1:new_ptr
分配了new []
。要解除分配它,您必须使用 delete []
而不是 free
.
问题#2:ptr = new_ptr;
ptr
设置为指向与new_ptr
相同的T[]
数组。new-ptr
被解除分配后ptr
将指向未分配的空间。然而,后续代码试图在 ptr[i]
中取消引用它。这是UB(未定义的行为),让程序预先出现段错误实际上是所有场景中最幸运的。
相关文章:
- 将库链接到另一个应用程序时,CMAKE 找不到库
- 给定一个 3 x 3 矩阵或任何 n x n 矩阵,为什么我的以下函数找不到对角线差异?
- 这个基于范围的'for'语句需要一个合适的函数,但找不到任何函数
- 我在 c++ 中的 AES 代码有问题。明文正在更改,但加密邮件是相同的。我找不到我的错误
- 为什么C++找不到布尔运算符,当有一个!范围内的运算符?
- 任何人都有unistd.h在Ubuntu上找不到的情况
- 找不到用户定义的 getline。自动扣款有问题?
- 在使用 bazel 构建一个简单的应用程序时,得到错误在 '/usr/lib/java/jdk1.8.0_74/bin/java' 找不到 java
- C 搜索数组以获取一个数字,但如果找不到该数组,则不会触发其他语句
- 是否有可以将每个双精度转换为唯一uint64_t,保持精度和顺序的功能?(为什么我找不到?
- NetBeans - 两个项目 - 一个找不到要包含的文件 (C++)
- 找不到正确的 Qt5Core.dll 文件。我发现的每一个都会给出不同的错误
- 当绑定发生在另一个函数中时,Sqlite 找不到行 _only_
- 我有一个分段错误,似乎找不到它
- C++创建进程 - 系统错误#2找不到文件 - 我的文件路径有什么问题?
- 内联 - 找不到<ia64intrin.h>,但有<ia32intrin.h>?
- 我在第一个 switch 语句中找不到错误
- 找不到PythonLibs(要求3.3,但我有2.7.6)
- 我的代码中有一个错误,可能是语法或我找不到的 if 语句。编程新手
- dlopen找不到有问题的符号