Передача массива указателей в функцию C

Я передаю массив указателей на функции и модифицирую их, но они неожиданно меняются. Это моя основная функция:

#include <stdlib.h>
#include <stdio.h>
typedef struct {
   int x;
   int y; 
}enemy;

void main() {
  enemy* array[5];
  function(array);
}

И эта функция не работает:

void function(enemy* arr[]){
   int b;
   for(b=0;b<5;b++)
      arr[b]=(enemy*)malloc(sizeof(enemy));
  for(b=0;b<5;b++){
      arr[b]->x=b;
      arr[b]->y=b*16;
      printf("%d %d, ", arr[0]->x, arr[0]->y);
  }
}

Каждый раз звоню printf первый указатель массива меняет свои значения, и я не знаю почему.

Printf печатает: "0 0, 1 16, 2 32, 3 48, 4 64". Разве это не должно печатать все время "0 0"? Это то, что я ожидал.

2 ответа

Решение

Ниже приводится версия вашего кода, который я использовал для тестирования:

#include <stdlib.h>
#include <stdio.h>
typedef struct
{
   int x;
   int y;
}enemy;

void function(enemy* arr[]);

int main( void )
{
  enemy* array[5];
  function(array);
}

void function(enemy* arr[])
{
   int b;
   for(b=0;b<5;b++)
      arr[b]=(enemy*)malloc(sizeof(enemy));
  for(b=0;b<5;b++){
      arr[b]->x=b;
      arr[b]->y=b*16;
      printf("%d %d, ", arr[0]->x, arr[0]->y);
  }
}

Примечание: final printf() всегда выводит первую запись в массиве

Результат:

0 0, 0 0, 0 0, 0 0, 0 0, 

что я поменял?

1) corrected the return type from main()
2) prototyped the `function()` function.

Каждый раз, когда вы вызываете функцию? Ты имеешь в виду, что звонишь не раз?

Если это так, функция заменяет все указатели в arr при каждом вызове. Переместите цикл malloc на main, затем вызовите функцию так, как вы хотите

Другие вопросы по тегам