我正在学习有关动态内存分配在C我搜索这里同样的问题,找到解决方案,说这是对C ++编译器错误。我不明白的是为什么我在使用.c扩展而不是.cpp时出现此错误。我正在使用Visual Studio Express 2012。
如果有人需要,这是我编写的代码。这是一个用于输入矩阵(输入)并将其写入屏幕(输出)的简单程序:
#include <stdio.h>
#include <stdlib.h>
void main()
{
int **a;
int i,j,n,m;
printf("Enter matrix dimensions:\n");
scanf("%d%d", &n,&m);
printf("Enter matrix:\n");
a=malloc(n*sizeof(int*));
for (i=0; i<n; i++)
{
a[i]=malloc(m*sizeof(int));
for (j=0; j<m; j++)
{
scanf("%d",&a[i][j]);
}
}
printf("Matrix is:\n");
for (i=0; i<n; i++)
{
for (j=0; j<m; j++)
{
printf("%d ",a[i][j]);
}
putchar('\n');
}
}
注意:我使用相同的编译器在C中执行了其他程序(没有动态内存分配),一切都很好。
编辑和更新(结论):
我结合了从莫斯科的弗拉德(Vlad)和希万什·贾格(Shivansh Jagga)得到的两个答案,这解决了这个问题。Vlads的回答有助于编译,而Shivanshs摆脱了错误,但是我必须说,正如注释中所建议的那样,malloc不需要类型转换,程序可以处理该错误,只是跳过了它。
我看到Shivansh Jagga的回答由于某种原因被删除了。基本上,他的回答是要消除错误,您需要转到:
项目>属性> C / C ++>常规> SDL检查>否。
很明显,您正在将程序编译为C ++程序。
在C语言中,void *
可以将类型的指针分配给任何其他类型的对象指针,而无需显式转换。
要将其编译为C程序,您应该执行以下操作。
据我记得,您应该从菜单中选择项目Project,然后选择类似Project properties(J没有IDE的英文版),然后在面板中选择C / C ++-> Additional,然后在右侧面板将项目编译为C(/ TC)
考虑到根据C标准,没有参数的函数main应该声明为
int main( void )
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句