为什么我的程序在几次运行后崩溃? 我对C++比较陌生。我的程序似乎编译得很好,但每运行4-5次就会崩溃一次。在最初的几次运行中,它似乎工作得很好,但过了一段时间,我会出现错误,我的程序将停止工作
这是它在调试器中告诉我的,但我无法确定是哪一行导致了崩溃。我认为我没有正确删除动态分配的内存,也没有尝试访问空指针。我一直在把头发拔出来,但我的头都绕不过去了为什么我的程序在几次运行后崩溃? 我对C++比较陌生。我的程序似乎编译得很好,但每运行4-5次就会崩溃一次。在最初的几次运行中,它似乎工作得很好,但过了一段时间,我会出现错误,我的程序将停止工作,c++,arrays,C++,Arrays,这是它在调试器中告诉我的,但我无法确定是哪一行导致了崩溃。我认为我没有正确删除动态分配的内存,也没有尝试访问空指针。我一直在把头发拔出来,但我的头都绕不过去了 #包括 使用名称空间std; int**测试(int*,int); int main(){ int-arr[3]={135302806324777}; int**p=试验(arr,3); 整数计数=0; 常数int size2=10; 对于(int i=0;i
#包括
使用名称空间std;
int**测试(int*,int);
int main(){
int-arr[3]={135302806324777};
int**p=试验(arr,3);
整数计数=0;
常数int size2=10;
对于(int i=0;i 难道你永远不会删除
任何东西,因为你在点击该代码之前返回了
。因此你有一个内存泄漏,最终会使你的程序崩溃。你最好使用智能点,或者最好还是使用一个标准容器,例如std::vector
或std::array
这似乎是个问题m正在写入数组a
的边界之外。请参阅,a
是一个10x2数组
const int size2 = 10;
int** a = new int*[size2];
for (int i = 0; i < size2; i++) {
a[i] = new int[2]();
}
int* array1 = a[0];
int* array2 = a[1];
在这里,您可以写入到array1[2]、array1[3]、…
。对于array2
也是如此
如果您的程序不时崩溃,很有可能会出现内存损坏问题。您的意思是在删除数组之前返回a吗?当然,如果是这种情况,那么您的删除代码将永远不会运行。您真的应该改用a。我认为您最好先学习向量然后再切换到指针。也许你应该从类和向量开始,然后进入“基本基础”。std::vector
是你的面包和黄油,指针是“只有在我必须的情况下”的东西。我想Nathan的意思是,如果你用[I,j,k]编写代码,你可能永远都不会通过“基本基础”数组索引。多个星型、指针和过多的新建/删除。为什么一个较小的内存泄漏会导致访问冲突异常导致应用程序崩溃?
const int size2 = 10;
int** a = new int*[size2];
for (int i = 0; i < size2; i++) {
a[i] = new int[2]();
}
int* array1 = a[0];
int* array2 = a[1];
// fill "arrays"
for (i = 0; i < size2; ++i) {
if (uncommons[i])
array1[i] = uncommons[i];
}
for (i = 0; i<size2; ++i) {
array2[i] = totals[i];
}