为什么我的程序在几次运行后崩溃? 我对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];
}