(Proficient at C++, новичок в C) получает ошибку segfault из вызова addArray() в main(). Я проверил множество сообщений и несколько текстов, он компилируется, но не повезло. Я кодирую его на VS2015, и все обычные удобные подсказки есть с указателями и т. Д. Очистите что-то, что я не знаю или синтаксическая ошибка. Это дистиллированный код, который воспроизводит ошибку.Добавление элемента массива в массив в структуре
#include<stdio.h>
#include <stdlib.h>
#define TYPE int
struct arrayHolder {
TYPE data[100];
int count;
};
//prototypes.
void initArray(struct arrayHolder *);
void addArray(struct arrayHolder *, TYPE);
int main() {
struct arrayHolder * myStruct = NULL;
initArray(myStruct);
addArray(myStruct, 123);
}
/* Allocate memory for struct arrayHolder */
void initArray(struct arrayHolder * b) {
b = (struct arrayHolder *)malloc(sizeof(struct arrayHolder));
b->count = 0;
}
/* Add an element to data[] */
void addArray(struct arrayHolder * b, TYPE v) {
int count = b->count;
b->data[count] = v;
(b->count)++;
}
аргументы передаются по значению. Назначение внутри initArray() не имеет эффекта вне функции. –
@ def1: Но не передаю ли указатель? – Chris
@ Chris: Да, и вы можете изменить данные, на которые указывает указатель, но вы назначаете новое значение самому указателю, который не будет переноситься вне функции, используйте указатель на указатель. – Unimportant