どうしたのか教えていただけますか?Cでの動的割り当てエラー
#include <stdio.h>
#include <stdlib.h>
void read(int *p,int n)
{
int *q,i,j;
q=p;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
printf("matrix[%d][%d]=",i,j);
scanf("%d",q);
q=q+1;
}
printf("\n");
}
void alocate(int *p,int n)
{
p=(int*)malloc(n*n*sizeof(int));
if(p==NULL)
{
printf("Allocation error\n");
exit(1);
}
}
void realocate(int *p,int n)
{
p=(int*)realloc(p,n*n*sizeof(int));
if(p==NULL)
{
printf("Reallocation error\n");
exit(1);
}
}
void show(int *p,int n)
{
int *q,i,j;
q=p;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
printf("%d\t",*q);
q=q+1;
}
printf("\n");
}
}
void cleaner(int *p)
{
free(p);
}
int main() {
int *p,n;
p=NULL;
printf("n=");
scanf("%d",&n);
alocate(p,n);
read(p,n);
show(p,n);
realocate(p,2);
read(p,2);
show(p,2);
cleaner(p);
return 0;
system("pause");
}
のNetBeans(MinGWの)
RUN FAILED(終了値5)が
信号を受信:sigcodeとSIGSEGVを(?)? (?) プロセスから:? は、プログラムcppapplication_1の場合はPID -1
のVisual Studio:0xc0000005で:0x5c81e42e(msvcr100d.dll)で
未処理の例外をCapp.exeでアクセス違反書き込み場所0x00000000のを。
また、p = NULLを削除すると、主な機能から、それは言う:
ランタイムチェック失敗#3 - 変数 'p'は初期化されずに使用されています。 Capp.exeで0x5b4ee42e(msvcr100d.dll)の未処理の例外:0xC0000005:アクセス違反が0xccccccccに書き込まれました。
私のアドバイスは、デバッグ情報でビルドし、デバッガを使用する方法を学ぶことです。 –