0

我正在研究一个在线代码学校的简单算法。以下算法在我的 Xcode 控制台上运行良好,但在线平台输出我正在溢出内存。以下代码处理股票的筛选。(我第一次使用 malloc 动态分配,但是在这个消息之后,我使用了简单的数组,见下文)。

假设您有 N 种产品的库存。假设初始库存由大小为 N 的一维数组 ( c[i], i between 0 and N-1) 设置。现在假设有 M 个操作,每个操作由两个条目表示:产品的索引和输入的产品数量。结果输出库存的每个产品的最终状态。这是一个例子:

输入 :

3(产品数量)4 6 3(产品'1'的4个项目,产品'2'的6个,...)2(操作数量)2 3(产品'2'的3个元素)1 -1(1 个元素减去产品“1”)

输出 :

3(产品“1”左侧 4-1) 9(产品“2”左侧 6+3) 3(产品“3”左侧)

这是我的代码:

#include <stdio.h>
#include <stdlib.h>


int main()
{   int i,j,N,M;
    //Number of products
    scanf("%d",&N);
    //Initial stock of each product
    int c[N];
    //Input if the user
    for (i = 0; i < N; i++) {
        scanf("%d", &c[i]);}
    //Outputs's result
    int res[N];
    //Initializing the output res
    for (i = 0; i < N; i++) {
        res[i] = c[i];}
    //Number of operations
    scanf("%d",&M);
    //Each operation represented by the index of the product, and the number elements of the        //latter
    int d[M][2];
    //A loop to update at each step the stock
    for (i = 0; i < M; i++) {
        scanf("%d%d", &d[i][0],&d[i][1]);}
    for(i=0;i<M;i++){
                res[d[i][0]-1] = res[d[i][0]-1] + d[i][1];}
    //Printing the result
    for(i=0;i<N;i++){
        printf("%d ",res[i]);}
}

有人有想法吗?

4

1 回答 1

3

在此循环中读取产品索引时,您不会检查它们的范围:

for (i = 0; i < M; i++) { scanf("%d%d", &d[i][0],&d[i][1]);}

因此,如果有人输入超出范围的产品索引,程序将索引超出 res 数组的末尾。

于 2012-10-23T18:36:00.220 回答