我应该如何制作1<n<300000的动态数组
我正在尝试解决竞争性编程页面上的问题,我想到解决它的好方法是创建一个动态数组,现在我不在乎这个问题和我想知道的是如何实现这样的事情。
这个想法是首先他们给我们案例的数量(数组的大小),然后我们对该数组进行某些游览,我还必须将其应用于字符矩阵(字符串数组),这段代码当案例的输入为 1 <n <110 时,我在这里工作得很好,但是当然,当该范围被传递时(它应该高达 300000)给我一个内存访问错误Process finished with exit code -1073741819 (0xC0000005),考虑到我正在尝试什么,这是正常的做,我什至不知道是否可以,在此先非常感谢!
这是我的代码:
int main() {
int cases, i, j, max = 0;
while ((scanf("%d", &cases)) != EOF) {
int *victims;
victims = (int *) malloc(cases * sizeof(int));
const char **date;
date = (const char **) malloc(cases * sizeof(char));
for (i = 0; i < cases; i++) {
date[i] = (char *) malloc(10 * sizeof(char));//String max length is 10.
}
for (i = 0; i < cases; i++) {
scanf("%s", date[i]);
scanf("%d", &victims[i]);
}
}
}
回答
线条
const char **date;
date = (const char **) malloc(cases * sizeof(char));
错了。元素是const char*,因此您必须为此分配。换句话说,您必须为每个元素分配指针的大小,而不是字符的大小。
此外,数组元素所指向的对象date将通过scanf()稍后进行修改,因此它们应该是char*,而不是const char*。
它应该是
char **date;
date = malloc(cases * sizeof(char*));
或者
char **date;
date = malloc(cases * sizeof(*date));
还有线
date[i] = (char *) malloc(10 * sizeof(char));//String max length is 10.
是错的。您必须为终止空字符再分配一个元素,以允许在那里存储 10 个字符的字符串。
它应该是:
date[i] = malloc(11 * sizeof(char));//String max length is 10.
另请注意:
- 你不需要乘,
sizeof(char)因为它被定义为 1。 - 铸造结果
malloc()被认为是一种不好的做法。