gpt4 book ai didi

c++ - 调试和编译C++程序后的不同输出

转载 作者:行者123 更新时间:2023-11-30 03:11:46 26 4
gpt4 key购买 nike

我在 XP 虚拟机中的 MingW 编译器上运行 CodeBlocks。我写了一些简单的代码,可在 cl1p 访问,它回答了算法问题 CodeChef (好吧,它只回答了部分问题,因为我还没有包含多个测试用例的循环。

但是,我的问题是,在 Debug模式下运行它时,它会为输入提供正确的输出 5:

3
1
2 1
1 2 3

但是,当我构建并运行它时,它给出了荒谬的巨大输出 131078,这对我来说似乎是垃圾。我不明白这到底是怎么回事,但我猜这与动态内存分配有关。这里有什么问题,我该如何解决?我什至通过 BotSkool 的在线编译器运行它,而且效果很好。添加测试用例循环后,代码甚至可以在 CodeChef 上正常运行!

#include <iostream>

using namespace std;

int main()
{
// Take In number of rows
int numofrows;
cin >> numofrows;

// Input Only item in first row
int * prevrow;
prevrow = new int[1];
cin >> prevrow[0];

// For every other row
for (int currownum = 1; currownum < numofrows; currownum++)
{
// Declare an array for that row's max values
int * currow;
currow = new int[currownum+1];

int curnum;
cin >> curnum;

// If its the first element, max is prevmax + current input
currow[0] = prevrow[0] + curnum;

// for every element
int i = 1;
for (; i <= currownum; i++)
{
cin >> curnum;

// if its not the first element, check whether prevmax or prev-1max is greater. Add to current input
int max = (prevrow[i] > prevrow[i-1]) ? prevrow[i] : prevrow[i-1];

// save as currmax.
currow[i] = max + curnum;
}

// save entire array in prev
prevrow = new int[i+1];
prevrow = currow;
}

// get highest element of array
int ans = 0;
for (int j=0; j<numofrows; j++)
{
if (prevrow[j] > ans)
{
ans = prevrow[j];
}
}

cout << ans;
}

最佳答案

在 Linux 机器上通过 Valgrind 运行代码,您会惊讶于您的代码有多少地方在泄漏内存。如果您正在艰难地管理内存,请做好它并在分配更多内存之前“删除”所有新分配的内存。另一方面,如果您更喜欢简单的方法,请使用 std::vector 并忘记内存管理。

关于c++ - 调试和编译C++程序后的不同输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1989805/

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