gpt4 book ai didi

c - C 中动态分配的二维数组

转载 作者:行者123 更新时间:2023-11-30 19:58:30 27 4
gpt4 key购买 nike

我陷入了使用 malloc() 在 C 中编译二维数组的困境;

尝试在 Microsoft Visual Studio Express 2013 中编译我的代码时,我不断收到错误“无法将类型为“int **”的值分配给类型为“int *”的实体”

这是我的代码:

  int main() {
int lines = 0;
int **cord;

FILE *f = fopen("data.txt", "r");
if (f == NULL) return 0;

fscanf(f, "%d", &lines);
printf("%d", lines);

*cord = (int**)malloc(lines*sizeof(int*));

int i = 0;
for (i; i < lines; ++i)
{
cord[i] = (int*)malloc(2 * sizeof(int));
fscanf(f, "%d", cord[i][0]);
fscanf(f, "%d", cord[i][1]);
}
i = 0;
return 0;
}

谁能指出我哪里出了问题吗?

最佳答案

*cord = (int**)malloc(lines*sizeof(int*));

是错误的,您正在取消引用未初始化的指针cord。请编码

cord = malloc(lines*sizeof(int*));
if (!cord) { perror("malloc cord"); exit (EXIT_FAILURE); }

永远不要忘记测试malloc的失败(您还应该在分配cord[i]时测试它)

顺便说一句,您应该在编译器中启用所有警告和调试信息。如果使用最近的GCC作为 gcc -Wall -Wextra -g 你会因为第一个错误而被警告。

另外,如果你想要一个C语言的矩阵,最好使用一维数组来表示它。

关于c - C 中动态分配的二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26627480/

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