gpt4 book ai didi

c++ - 获取 C++ 段错误

转载 作者:行者123 更新时间:2023-11-27 22:50:24 37 4
gpt4 key购买 nike

我在 linux 服务器上,当我尝试执行该程序时,它返回了一个段错误。当我使用 gdb 尝试找出原因时,它返回..

Starting program: /home/cups/k

Program received signal SIGSEGV, Segmentation fault.
0x0000000000401128 in search(int) ()
Missing separate debuginfos, use: debuginfo-install glibc-2.12-1.192.el6.x86_64 libgcc-4.4.7-17.el6.x86_64 libstdc++-4.4.7-17.el6.x86_64

我无法完全理解这一点。在我的程序中,我有一个名为“search()”的函数,但我没有看到任何会导致段错误的东西。这是函数 def:

int search (int bit_type) {                                               // SEARCH FOR A CONSEC NUMBER (of type BIT_TYPE) TO SEE IF ALREADY ENCOUNTERED

for (int i = 1; i <= MAX[bit_type]; i++) { //GO THRU ALL ENCOUNTERED CONSEC NUMBERS SO FAR (for type BIT_TYPE)
if (consec == r[bit_type][i]) // IF: FOUND
return i; // -----> RETURN INDEX OF RECORDED CONSEC_NUM
}
// IF: NOT FOUND
r[bit_type][++MAX[bit_type]] = consec; // -----> INCREMENT MAX[bit_type] & RECORD NEW CONSEC_NUM -------> ARRAY[MAX]
n[bit_type][MAX[bit_type]] = 1;
return (MAX[bit_prev]); // -----> RETURN THE NEWLY FILLED INDEX
}

全局函数:

int MAX[2];
int r[2][200];
int n[2][200];

这些评论对你们来说非常无用,因为你们没有程序的其余部分..但你们可以忽略它们。

但是你们看到我遗漏了什么吗?

最佳答案

从链接到您的代码 here ,这只是一个错误:

 int *tmp = new int[MAX[0]];
for (int y = 0; y <= MAX[0]; y++) {
tmp[y] = 1;
}

您在上一次迭代中越界了。你用 MAX[0] 分配了一个数组项,并且在最后一次迭代中您正在访问 tmp[MAX[0]] .

那个循环应该是:

 int *tmp = new int[MAX[0]];
for (int y = 0; y < MAX[0]; y++) {
tmp[y] = 1;
}

或者更好:

 #include <algorithm>
//...
std::fill(tmp, tmp + MAX[0], 1); // no loop needed

或使用 new[] 跳过动态分配并使用 std::vector :

  #include <vector>
//...
std::vector<int> tmp(MAX[0], 1);

通常,您有多个循环执行此操作:

for (int i = 1; i <= number_of_items_in_array; ++i )

然后您使用 array[i] 访问您的数组.这是 <=在那for循环条件是可疑的,因为它会在最后一次迭代时尝试访问具有越界索引的数组。

另一个例子是这样的:

long sum(int arr_r[], int arr_n[], int limit)
{
long tot = 0;
for (int i = 1; i <= limit; i++)
{
tot += (arr_r[i])*(arr_n[i]);
}
return tot;
}

在这里,limit是数组中元素的个数,你访问arr_r[i]在最后一次迭代中,导致未定义的行为。

数组的索引从 0 开始到 n - 1 , 其中n是元素的总数。尝试伪造基于 1 的数组几乎总是会导致代码库内部某处出现这些类型的错误。

关于c++ - 获取 C++ 段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37649298/

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