2017-02-19 122 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'對象作爲示例。

避免使用動態內存,而是從性能角度使用堆棧。但是當你使用棧時,它不如堆大,因此當圖像尺寸很大時,數據類型的大小非常重要。