我无法在数组中分配内存

时间:2016-12-11 14:23:32

标签: c

  #include< stdio.h>
 #include< stdlib.h>

 int crp(int mtrs [],int size)
 {&# XA; int a = 1;
 int i;

对于(I = 0; I<大小; ++ I)
 {
 A * =中期审查[I];
 }

返回a;
}

 int main()
 {
 int k,size;
 int ** mtrs;

 printf(“输入矩阵的大小:”);
的scanf( “%d”,&安培;大小);

中期审查=(INT **)的malloc(大小*的sizeof(INT *));

 if(mtrs == NULL)
 printf(“Yetersiz bellek!”);

 printf(“输入矩阵的输入数字:”);

为(K = 0; K<大小; k ++)
 {
 mtrs [k] =(int *)malloc(size * sizeof(int));
 if(mtrs [k] == NULL)
 printf(“内存不足!”);
 }
 for(k = 0; k  




我遇到访问冲突读取位置0xFDFDFD的问题。


 


它停留在* = mtrs [i]的位置; ..程序的目标是乘以输入的数字





我是不确定我是否以正确的方式使用malloc。




2 个答案:

答案 0 :(得分:1)

此代码段无效

for(k=0;k<size;k++) 
{

    scanf("%d",&mtrs[k]);
               &&&&&&&&
}

你应该写例如

int m;
//...

for(k=0;k<size;k++) 
{
    for ( m = 0; m < size; m++ )        
    {
        scanf("%d", &mtrs[k][m]);
    }
}

同样适用于此循环

for(k=0;k<size;k++){


    printf("%d ",mtrs[k]);

}

应该看起来像

for(k=0;k<size;k++) 
{
    for ( m = 0; m < size; m++ )        
    {
        printf("%d ",mtrs[k][m]);
    }
    printf( "\n" );
}

该功能应定义为

long long int crp( int * mtrs[],int size)
^^^^^^^^^^^^^      ^^^^^^^^^^^^
{
    long long int a=1;
    int i, j;
    ^^^^^^^^^


    for(i=0;i<size;++i)
    {
        for ( j = 0; j < size; j++ )
        {
            a*=mtrs[i];
        }
    }

    return a;
}

函数的结果应该像

一样输出
printf("Elemanlar carpimi %lld dir.",crp(mtrs,size));
                          ^^^^^

答案 1 :(得分:1)

我不完全明白你的代码点是什么,但你有各种各样的错误和逻辑问题。

  1. printf("%d ",mtrs[k]);scanf("%d",&mtrs[k]);期待int但您通过了*int(又名int[]),您可能需要使用2个嵌套{{}插入/读取值1}}循环。
  2. for上一个周期为printf("Elemanlar carpimi %d dir.",crp(mtrs[k],size));,根据for(k=0;k<size;k++),所以k = size超出界限,导致应用程序崩溃。