実装したいこととしては、ランダムで発生させた1~100の数値を偶数と奇数に分け、それぞれ配列に代入して出力を試みています。
その際に、偶数・奇数それぞれの数分のメモリ容量をmallocにて確保しています。
しかしながら、実行コードの下部 「ここが無いとエラーが発生」 のコードを入力しないと、
下部エラー画面のようなエラーが発生致します。
free関数で解放する際に、malloc関数で確保した最初の要素のアドレスに戻しておかないと、適切に解放出来ないのでしょうか?
どなたか、原因をご教授いただけますと幸いです。
↓実行コード
#include <stdio.h> #include <time.h> #include <stdlib.h> int main(){ int n; srand((unsigned)time(NULL)); printf("いくつの数値を計算しますか?:"); scanf("%d",&n); int a[n]; int i=0,g=0,k=0; int *pg, *pk; while(i<n){ a[i] = rand() % 100 + 1; if(a[i] % 2 == 0){ g++; }else{ k++; } i++; } pg = (int*)malloc(sizeof(int) * g); pk = (int*)malloc(sizeof(int) * k); for(i=0;i<n;i++){ if(a[i] % 2 == 0){ printf("%d ",a[i]); *pg = a[i]; pg++; }else{ printf("%d ",a[i]); *pk = a[i]; pk++; } } pg = pg - g; pk = pk - k; printf("\n偶数:"); for(i=0;i<g;i++){ printf("%d ",*pg); pg++; } printf("\n奇数:"); for(i=0;i<k;i++){ printf("%d ",*pk); pk++; } printf("\n"); pg = pg - g; //ここが無いとエラー発生 pk = pk - k; //ここが無いとエラー発生 free(pg); free(pk); }
↓エラー画面
pointer being freed was not allocated *** set a breakpoint in malloc_error_break to debug Abort trap: 6

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/02/24 02:27