【问题标题】:SIGSEGV on matrix declaration [duplicate]SIGSEGV 关于矩阵声明 [重复]
【发布时间】:2013-11-13 22:25:54
【问题描述】:

当我的代码到达矩阵声明时,我得到一个 SIGSEGV,但我没有得到太多关于它的信息。这是我的代码:

void mascaraLaPlace(unsigned char Img[1200][1200][3],int Rx,int Ry){
  int x,y,a,b,c,d;
  int valorR,valorG,valorB;
  unsigned char copia[Rx][Ry][3];
  for (y=0;y<Ry;y++){//operations}

unsigned char copia[Rx][Ry][3] 是代码停止并给我 SIGSEGV 错误的地方。 我在带有 mingw 套件的 windows 上使用代码块。

【问题讨论】:

  • This 可能是一个有用的解释......

标签: c gcc matrix declaration segmentation-fault


【解决方案1】:

根据 Rx 和 Ry 的值,您的数组可能对堆栈来说太大了。例如,如果它们都是 2000,那大约是 12 兆字节,远远超过大多数操作系统默认为堆栈保留的大小。

【讨论】:

  • 好吧,这似乎是问题所在,因为我只检查 Rx 和 Ry 的小值,一切正常。考虑到这两个值的最大值分别为 1200 并且矩阵的值在 [0,255] 范围内,我有没有办法可以使用具有更大值的相同函数?
  • 查看您的问题评论中链接的问题——那里的答案很好。简而言之——在堆上分配数组而不是在栈上。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-15
  • 1970-01-01
  • 2014-03-15
  • 1970-01-01
相关资源
最近更新 更多