程序给出错误的分配错误

Posted

技术标签:

【中文标题】程序给出错误的分配错误【英文标题】:Program giving bad alloc error 【发布时间】:2015-09-03 07:09:36 【问题描述】:

我编写了一个程序来生成一个正方形填充矩阵,该矩阵以螺旋顺序填充从 1 到 n^2 的元素。它给出了一个错误的分配错误。 错误消息类似于在抛出 'std::bad_alloc' 实例后调用终止 什么():std::bad_alloc 中止(核心转储) 有人可以建议我如何使用 gdb 删除它并删除此类错误

这里是代码

#include<iostream>
#include<vector>
using namespace std;



vector<vector<int> > generateMatrix(int A) 

if(A<=0)//if value of A return null matrix
  return vector<vector<int> >();

vector<int>v(A,0);   
vector<vector<int> >result(A,v);



     int i, k = 0, l = 0;
     int n = A, m = A;
/*  k - starting row index
    m - ending row index
    l - starting column index
    n - ending column index
    i - iterator
*/
int c = 1;//used for numbering

while (k < m && l < n)

    /* Print the first row from the remaining rows */
    for (i = l; i < n; ++i)
    
        result[k][i]=c++;
    
    k++;

    /* Print the last column from the remaining columns */
    for (i = k; i < m; ++i)
    
        result[i][n-1]=c++;
    
    n--;

    /* Print the last row from the remaining rows */
    if ( k < m)
    
        for (i = n-1; i >= l; --i)
        
            result[m-1][i]=c++;
        
        m--;
    

    /* Print the first column from the remaining columns */
    if (l < n)
    
        for (i = m-1; i >= k; --i)
        
        result[i][l]=c++;
        
        l++;    
            
    


int main()
   
     int n;

cin>>n;

vector<vector<int> >X(n,vector<int>(n));
X = generateMatrix(n);

for(int i  = 0; i < n; i++)

cout<<'\n';
    for(int j = 0;j<n;j++)
       cout<<X[i][j]<<'\t';


return 0;

【问题讨论】:

请添加语言标签 【参考方案1】:

您忘记了return 实际生成的向量,您只覆盖了A &lt;= 0 案例。那是未定义的行为。如果您启用了编译器警告,您应该会看到

warning C4715: 'generateMatrix' : not all control paths return a value

【讨论】:

非常感谢 LogicStuff LogicStuff 能否提供解决分段和错误分配错误的系统方法。 @user2033594:这看起来像你在要求 LogicStuff 做你的作业。为什么要其他人做你的功课? @user2033594 缺少 return 语句具有未定义的行为,我没有任何系统的调试方法。我什至不使用gdb。对于这个具体案例,它只是“阅读警告”。 不是这样的@Tive

以上是关于程序给出错误的分配错误的主要内容,如果未能解决你的问题,请参考以下文章

Objective-C 结构定义和修改给出错误“表达式不可分配”?

C++ 向量上的分配错误

没有重载匹配此调用。最后一个重载给出了以下错误。类型 '"text"' 不可分配给类型 '"json"'

使用malloc获取错误来分配内存

普罗米修斯中的警报管理器给出退出代码错误并忽略普罗米修斯中警报管理器的分配

C++ 套接字 - 客户端给出分段错误(linux)