Передача массива указателей в функцию 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, затем вызовите функцию так, как вы хотите