gpt4 book ai didi

c - 错误: value of type “void *” cannot be assigned to an entity of type “int **”

转载 作者:行者123 更新时间:2023-12-02 10:42:03 26 4
gpt4 key购买 nike

我正在学习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 MoscowShivansh 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 )

关于c - 错误: value of type “void *” cannot be assigned to an entity of type “int **” ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46122085/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com