我应该如何制作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() 被认为是一种不好的做法。

以上是我应该如何制作1&lt;n&lt;300000的动态数组的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>