嗨,每个人的支持,但没有人提供我所需的信息现在我尝试做这样的程序
#include<stdio.h>
#include <stdlib.h>
int main()
{
int **a,i,j;
system("clear");
a=(int*)malloc(sizeof(int)*5);
for (i=0; i<5; i++)
{
a[i]= malloc(sizeof(int)*3);
for (j=0; j<3; j++)
{
printf("\nplease enter the [%d][%d] location = ",i,j);
scanf("%d",&a[i][j]);
}
}
for (i=0; i<5; i++)
{
for (j=0; j<3; j++)
{
printf("\nthe value enter enter the [%d][%d] location = ",i,j);
printf("%d",a[i][j]);
}
}
free(a);
return ;
}
Run Code Online (Sandbox Code Playgroud)
我在编译时遵守它,它显示了warnig正在跟随
c:8: warning: assignment from incompatible pointer type
Run Code Online (Sandbox Code Playgroud)
在运行程序时它从用户那里取15个值,但它没有显示用户输入的值,任何人都可以解释我做错了什么,任何机构都能解释我双指针和动态内存分配的概念
首先,代码中的内存分配不正确.第一个malloc看起来如下
a = (int **) malloc(sizeof(int *) * 5);
Run Code Online (Sandbox Code Playgroud)
你a是int **,你宣布它.您是铸造的结果malloc来int *.int *并且int **是编译器警告您的那些不兼容的类型.为避免将来出现此类错误,请摆脱在语句中使用类型的坏习惯.C中的类型属于声明.陈述应尽可能与类型无关.上面的malloc调用看起来会好得多
a = malloc(5 * sizeof *a);
Run Code Online (Sandbox Code Playgroud)
注意:没有演员表,没有提到类型.第二个malloc看起来如下
a[i] = malloc(3 * sizeof *a[i]);
Run Code Online (Sandbox Code Playgroud)
我希望你看到这些malloc调用建立的模式.
您还忘记为程序中的各个子数组释放内存(a[i]内存永远不会被释放,而a内存也是如此).
至于没有显示输入值的程序......断开malloc调用的第一个问题严重到足以阻止程序运行,但它仍然可能在某些平台上"工作".在这样的平台上,它应该显示值.你确定你不是简单地错过输出吗?