【发布时间】:2018-02-17 17:04:01
【问题描述】:
我正在学习 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 from Moscow 和Shivansh Jagga 得到的两个答案,这解决了问题。 Vlads 的回答有助于编译,Shivanshs 摆脱了错误,但我不得不说,正如 cmets 中所建议的那样,malloc 不需要 需要 类型转换并且程序 可以 em> 处理那个错误,它只是跳过它。
我看到 Shivansh Jagga 的回答由于某种原因被删除了。基本上他的回答说要摆脱你需要去的错误:
项目 > 属性 > C/C++ > 常规 > SDL 检查 > 否。
【问题讨论】:
-
尝试投射到任何你想要的:
a = (int**) malloc(n*sizeof(int)) -
您阅读的内容是正确的...这是您使用 C++ 编译器将 C 编译为 C++ 时发生的错误。
-
这与您的问题无关,但
void main()应该是int main(void)。 (一些编译器让你摆脱void main();这并不意味着它是正确的。) -
@AnT:实际上,OP 试图编译为 C,但代码实际上被编译为 C++,这就是问题所在。 [c] 标签是正确的。
-
@AnT:在之前的 cmets 中,OP 已经明确表示他想将代码编译为 C。似乎他的工具链存在一些问题,导致他的代码被编译为 C++而是。
标签: c visual-studio visual-studio-2013 compiler-errors