私のプログラムでは、データベースに別の人物を追加できるようにメモリを再割り当てしようとしています。しかし、私はEXC_BAD_ACCESSエラーを受け取ったまま、新しいエントリのファーストネームを入力します。メモリを正しく再割り当てする方法は?
void addRecord (char **firstName, char **lastName, double *scores, int *numberPeople) {
int i;
char **newFirstName, **newLastName;
double *newScores;
*numberPeople += 1; // adds person to total number of people
newFirstName = (char**) realloc(firstName,*numberPeople*sizeof(char*));
newLastName = (char**) realloc(lastName,*numberPeople*sizeof(char*));
newScores = (double*) realloc(scores,1*sizeof(double));
for (i = *numberPeople - 1; i < *numberPeople; i++) {
newFirstName[i] = (char*) realloc(firstName, MAXIMUM_DATA_LENGTH*sizeof(char)); // MAXIMUM_DATA_LENGTH = 50
newLastName[i] = (char*) realloc(lastName, MAXIMUM_DATA_LENGTH*sizeof(char));
}
printf("Adding New Person....\n\n");
for (i = *numberPeople - 1; i < *numberPeople; i++) {
printf("First Name of new person: ");
scanf("%s", newFirstName[i]); // EXC_BAD_ACCESS (code=EXC_l386_GPFLT)
printf("Last Name of new person: ");
scanf("%s", newLastName[i]);
printf("Score of new person: ");
scanf("%lf", &newScores[i]);
}
私は私が正しくメモリを再割り当てていないよと仮定することができます。私はまだJavaから来ているCに比較的新しいので、ポインタに関する私のスキルレベルはかなり低いです。前もって感謝します。
あなたのコンパイラは、(適切に設定され、標準準拠)Cコンパイラ(またはあなたをしている使用していない変換せずに(または 'のrealloc()') ')' malloc関数(の戻り値を使用して文句を言っている場合'#include'がありません)。 –
pmg
@pmg私はxcodeの最新バージョンを使用しており、 'stdlib.h'ヘッダを含んでいます。だから、うん、私は何がアップしているか分からない... – David
あなたはC + +コンパイラを使用しているように見えます。私は適切に設定されたCコンパイラを使用し、2つの言語を混ぜないことをお勧めします。それらの違いは、何もないはずの問題を引き起こす可能性があります。あなたのメモリ割り当ての問題はおそらく、CまたはC++コンパイラの選択とは関係ありません。 – pmg