2017-02-19 125 views
0

因此,我正在处理我的任务,并且卡住了一段代码。返回对象类型C

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; 
} 

返回类型是图像对象。我将在此特定函数中计算二维数组的宽度/高度。我怎样才能返回这个值?

这是用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

请发布图像结构定义。 – synchronizer

+0

由于'struct image *'不是'int **',所以这显然不起作用。你有两个返回'a'的选项,它们都涉及改变函数的返回类型:'int **'或'void *'。不管* *是否合适都取决于你,因为我们没有任何关于'结构图像'的内容,也不知道为什么你会认为指向一个指针的原因与'int **'等价。 – WhozCraig

+0

这是我第一次用C语言编程 – BestGiraffeNigeria

回答

0

你MCVE看起来应该更喜欢这个:

struct image* createImg(unsigned int dim1, unsigned int dim2){ 
    int **a=NULL; 
    return a; //error here 
} 

请将更多的精力放在将MCVEs最小化上。

从这个例子中可以明显看出a的类型是int **,但返回类型是struct image *。这两种类型是不兼容的,因此是错误的。

我怎么能返回该值?

您需要了解如何返回struct image *值作为开始。

一旦你做到了这一点,制定出如何分配struct image在与struct image * ...

...最后,你可能想将您的初始值成struct image点。


它在C

我第一次编程不能学习程序用C这样!非制导试验和错误会导致很多麻烦,因为你将学习具体实现的语言是类似到C,但在微妙的(也可能是灾难性的)的方式不同。当您使用不同的实现时,这将变得明显。

您应该阅读一本书,如K & 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); 
} 

这应该加强,你需要一个更好的书的意见...

0

投入少,x和y的无符号即0-255(默认),用于图像阵列。但是当你减去这样的矩阵时,你可能会得到负值,当你可以将结果保存在整数矩阵中时。您可以在openCV中使用'Mat'对象作为示例。

避免使用动态内存,而是从性能角度使用堆栈。但是当你使用栈时,它不如堆大,因此当图像尺寸很大时,数据类型的大小非常重要。