【发布时间】:2021-01-31 08:39:05
【问题描述】:
我是 C 语言的新手,我编写了以下代码,但不幸的是,它不起作用。错误是 C6011 Dereferencing null pointer and C6386 Buffer overrun while writing for this line:
arr[i] = (char*)malloc(m * sizeof(char));
和 C6385 从 arr 和 C6011 读取此行的无效数据:
scanf_s("%c ", &arr[i][j],1);
另外,当我输入 1000 行 1000 个字符时,编译器会崩溃。我应该如何改进呢?
代码如下:
void individualTestCaseInput(char** arr, int n, int m) {
arr = (char**)malloc(n * sizeof(char*));
for (int i = 0; i < n; i++)
{
arr[i] = (char*)malloc(m * sizeof(char));
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++) {
scanf_s("%c ", &arr[i][j],1);
}
}
}
【问题讨论】:
-
你不需要一个三星级的设备吗?您正在覆盖参数,就好像它是一个局部变量一样,并且没有任何东西到达调用者。更容易和更清楚的是:将 2 星指针作为函数值返回。
char **individualTestCaseInput(int n, int m)
标签: c pointers pass-by-reference dynamic-memory-allocation function-definition