所以我正在完成我的任务,我被困在一段代码上。
struct image* createImg(unsigned int dim1, unsigned int dim2){
int **a=NULL;
int j;
a=malloc(dim1*sizeof(int*));
for (int i=0;i<dim1;i++)
{
a[i]=malloc(dim2*sizeof(int));
for (j=0;j<dim2;j++)
a[i][j]=0;
}
return a; //error here
//return 0;
}
返回类型是图像对象。我将在此特定函数中计算2D数组的宽度/高度。我怎样才能返回这个值?
这是在C
中完成的更新
头文件
struct image{
int **a;
};
我改变了一点实现
struct image* createWhiteimg(unsigned int dim1, unsigned int dim2){
struct image img;
img.a = NULL;
// int **a=NULL;
int j;
img.a=malloc(dim1*sizeof(int*));
for (int i=0;i<dim1;i++)
{
img.a[i]=malloc(dim2*sizeof(int));
for (j=0;j<dim2;j++)
img.a[i][j]=0;
}
return &img;
}
答案 0 :(得分:0)
你的MCVE应该看起来像这样:
struct image* createImg(unsigned int dim1, unsigned int dim2){
int **a=NULL;
return a; //error here
}
请将更多精力放在最小化MCVE上。
从这个示例中可以明显看出a
的类型是int **
,但返回类型是struct image *
。这两种类型是不兼容的,因此是错误。
我该如何归还这个值?
您需要先了解如何返回struct image *
值。
完成后,请确定如何分配struct image
指向struct image *
...
...最后,您可能希望将初始值插入struct image
。
这是我第一次用C编程
你不能像这样学习用C编程!无指导的试验和错误将导致令人头疼的问题,因为您将学习与类似到C的特定于实现的语言,但在细微(可能是灾难性的)方式上有所不同。当您使用不同的实现时,这将变得很明显。
你应该读一本像K&amp; R2E的书,做练习,然后开始处理这样的代码。
在切入树之前没有锐化你的斧头所造成的伤害是你使用太费力的方式!所以你想要分配一些类似于二维数组的东西?看这个:
#include <stdlib.h>
void create_image(size_t x, size_t y, int (**array)[y]) {
*array = malloc(x * sizeof **array);
}
int main(void) {
int (*array)[42];
create_image(13, 42, &array);
}
这应该加强你需要更好的书的建议......
答案 1 :(得分:0)
对于图像阵列,很少有输入,x和y必须是无符号的,即0-255(默认情况下)。但是当你减去这样的矩阵时,你可能得到负值,那就是你可以将结果保存在整数大小矩阵中。你可以使用&#39; Mat&#39;以openCV中的对象为例。
避免使用动态内存,而是从性能的角度使用堆栈。但是当你使用堆栈时它没有堆那么大,因此当图像尺寸很大时,数据类型大小很重要,这真的很重要。