C Programming Issues: Passing, creating, and returning structures in functions. -


this function doesn't work , can't figure out why. compiles fine , program seems run, upon close examination , debugging i'm discovering that:

newimg->x = b; newimg->y = a; 

isn't working , it's causing problems. tried copying newimg=img doesn't let me change values of newimg later. remain exact same. tried modifying values of img, doing newimg, debugging shows newimg getting extreme values.

here structure:

typedef struct {      unsigned char grayscale; } pgmpixel;  typedef struct {      int x, y;      pgmpixel *data; } pgmimage; 

here function:

static pgmimage *rotatepgm(pgmimage *img) {        pgmimage *newimg;       // memory allocation pgm     newimg = (pgmimage *)malloc(sizeof(pgmimage));     if (!newimg)      {          fprintf(stderr, "unable allocate memory\n");          exit(1);     }      //memory allocation pixel data     newimg->data = (pgmpixel*)malloc(newimg->x * newimg->y * sizeof(pgmpixel));     if (!newimg)      {          fprintf(stderr, "unable allocate memory\n");          exit(1);     }      int = img->x;     int b = img->y;     newimg->x = b;     newimg->y = a;        int u = - 1;     int v = b - 1;     int = 0;     int j = 0;      if(newimg)     {         (i = 0; < a; i++)         {             (j = 0; j < b; j++)             {                 img->data[(j*a)+(u-i)].grayscale = img->data[(i*b)+j].grayscale;             }         }     }        return newimg; } 

i'm using mingw gcc , windows 8 if helps.

the line

newimg->data = (pgmpixel*)malloc(newimg->x * newimg->y * sizeof(pgmpixel)); 

is wrong - uses newimg->x , newimg->y before initialised. should presumably use values img instead

newimg->data = malloc(img->x * img->y * sizeof(pgmpixel)); 

i've made small change line - you don't need cast return malloc

you use wrong pgmpixel instance later in line

img->data[... = img->data[... 

(it should presumably newimg->data assigning to)


Comments

Popular posts from this blog

html5 - What is breaking my page when printing? -

c# - must be a non-abstract type with a public parameterless constructor in redis -

ajax - PHP/JSON Login script (Twitter style) not setting sessions -