Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 主函数返回时的分段错误_C++_Memory Management_Segmentation Fault_Main - Fatal编程技术网

C++ 主函数返回时的分段错误

C++ 主函数返回时的分段错误,c++,memory-management,segmentation-fault,main,C++,Memory Management,Segmentation Fault,Main,我编写了一段代码,该代码编译良好,但返回运行时错误。在调试代码时,我发现错误出现在return 0语句之后从主函数返回时。 就我搜索的内容而言,我知道这是一个堆栈缓冲区溢出问题,但不知道如何纠正它。 代码可以在这里找到 #包括 #包括 使用名称空间std; 结构盒{ int-h; int w; int l; }; 布尔迈康普(常数框和b1、常数框和b2) { 返回((b1.l*b1.w)>(b2.l*b2.w)); } int boxstack(框b[4],int n) { box*all=新的

我编写了一段代码,该代码编译良好,但返回运行时错误。在调试代码时,我发现错误出现在return 0语句之后从主函数返回时。 就我搜索的内容而言,我知道这是一个堆栈缓冲区溢出问题,但不知道如何纠正它。 代码可以在这里找到

#包括
#包括
使用名称空间std;
结构盒{
int-h;
int w;
int l;
};
布尔迈康普(常数框和b1、常数框和b2)
{
返回((b1.l*b1.w)>(b2.l*b2.w));
}
int boxstack(框b[4],int n)
{
box*all=新的box[3*n];
//框*全部=(框*)malloc(框大小);
int j=0;

//看一下你的循环:

    for(int i=0; i<3*n; i++)
    {
        all[j].h = b[i].h;
        all[j].w = min(b[i].w,b[i].l);
        all[j].l = max(b[i].w, b[i].l);

        j++;  // increment 

        all[j].h = b[i].l;
        all[j].w = min(b[i].w,b[i].h);
        all[j].l = max(b[i].w, b[i].h);

        j++;  // increment again

        all[j].h = b[i].w;
        all[j].w = min(b[i].l,b[i].h);
        all[j].l = max(b[i].l, b[i].h);

        j++;  // increment once again
    }

all
3*n
项,但您的循环不仅最多循环
3*n
,而且在该循环中增加
j
3次。
j
的值最终将超出
所有

代码的分配空间。您应该首先调试程序,以包括只有相关的代码。它可能会帮助您将问题缩小到更少的代码行(也可能缩进良好)。这通常意味着您在编程过程中遇到了一些与指针相关的问题。请使用
valgrind
之类的工具进行调试。您的boxstack函数存在一些主要问题。您将
all
用作数组,但您只为一个BoxBw分配了内存。顺便说一句:您为一个长方体分配了空间,然后尝试将其用作3*n个元素的向量…Y您正在对
msh
执行相同的操作。您只分配其中一个,但将其用作
3*n
的数组。问题就在这里,而且我能够找到问题所在,即在排序函数调用中使用错误的数组导致无效的内存访问。
    for(int i=0; i<3*n; i++)
    {
        all[j].h = b[i].h;
        all[j].w = min(b[i].w,b[i].l);
        all[j].l = max(b[i].w, b[i].l);

        j++;  // increment 

        all[j].h = b[i].l;
        all[j].w = min(b[i].w,b[i].h);
        all[j].l = max(b[i].w, b[i].h);

        j++;  // increment again

        all[j].h = b[i].w;
        all[j].w = min(b[i].l,b[i].h);
        all[j].l = max(b[i].l, b[i].h);

        j++;  // increment once again
    }
box * all = new box[3*n];
int j = 0;
int * msh = new int[3*n];