- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在 C 上对 16384 数组实现插入排序。
排序算法运行正常,但是当遇到 free(inser) 命令时,调试器输出 Cannot find bounds of current function 错误。
这会不会是因为我在 64 位机器上使用 32 位 mingw 导致的?
int main(void) {
int i,t,j;
int *inser = malloc(sizeof(int)*16384);
int *shell = malloc(sizeof(int)*16384);
srand(time(NULL));
for(i=0;i<=16384;i++){
*(inser+i) = rand()% 17000;;
*(shell+i) = *(inser+i);
}
for(i=1;i<=16384;i++){
j = i-1;
while((*(inser+i)<*(inser+j)) && (j >=0)){
t = *(inser+i);
*(inser+i) = *(inser+j);
*(inser+j) = t;
j--;
i--;
}
}
for(i=0;i<=16384;i++){
printf("%d\t",*(inser+i));
}
free(inser);
free(shell);
return 0;
}
最佳答案
除了其他人指出的循环边界错误外,请查看下面标记为“警告”的行(我还清理了您的代码以使其更具可读性)。在这一行中,当 j
开始为零时,j
变为 -1。然后将在此处使用此值:
while( inser[i] < inser[j] && j >= 0 ) { ... }
逻辑“与”,&&
,是一个快捷运算符:它的左侧(LHS)总是被评估,而右侧只有在 LHS 评估为“真的”。因此 inser[-1]
将始终在最后一次内循环迭代之后进行计算,因为 j
已通过 j--
从 0 递减到 -1 > 在最终循环测试之前,其中 j>=0
将失败,但不会在 inser[j]
被评估之前。
你可以将操作数交换为 &&
来避免这个问题,得到这个:
while( j>=0 && inser[i] < inser[j] ) { ... }
除此之外,我不能说您的(更正后的)代码是否会按预期运行。
打开所有编译器警告,您可能会发现一些错误。
#include <stdio.h>
#include <stdlib.h>
/* Avoid magic numbers */
#define ARRAY_SIZE (16384)
#define RAND_CEILING (17000)
int main(void) {
int i; /* Indexing and iteration variable. */
int j; /* Indexing and iteration variable. */
int t; /* Temporary variable for swapping. */
int *inser; /* Sorted array. */
int *shell; /* Original array. */
/* Always check the return value of malloc() */
inser = malloc(ARRAY_SIZE*sizeof(*inser));
if( inser == NULL ) {
fprintf(stderr, "Call to malloc() failed for 'inser'.\n");
exit( EXIT_FAILURE );
}
shell = malloc(ARRAY_SIZE*sizeof(*shell));
if( shell == NULL ) {
fprintf(stderr, "Call to malloc() failed for 'shell'.\n");
exit( EXIT_FAILURE );
}
/* Seed the PRNG */
srand(time(NULL));
/* Correct the bounds on the iteration */
for(i=0; i<ARRAY_SIZE; i++) {
inser[i] = shell[i] = rand() % RAND_CEILING;
}
/* Sort 'inser' */
for(i=1; i<ARRAY_SIZE; i++) {
j = i-1;
while( inser[i] < inser[j] && j >= 0 ) {
t = inser[i];
inser[i] = inser[j];
inser[j] = t;
j--; /* WARNING: 'j' becomes -1 here */
i--;
}
}
/* Dump 'inser' to stdout */
for(i=0; i<ARRAY_SIZE; i++) {
printf("%d\t", inser[i]);
}
/* Cleanup */
free(inser);
free(shell);
return EXIT_SUCCESS;
}
关于找不到当前函数的边界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22838955/
例如,我有一个父类Author: class Author { String name static hasMany = [ fiction: Book,
代码如下: dojo.query(subNav.navClass).forEach(function(node, index, arr){ if(dojo.style(node, 'd
我有一个带有 Id 和姓名的学生表和一个带有 Id 和 friend Id 的 Friends 表。我想加入这两个表并找到学生的 friend 。 例如,Ashley 的 friend 是 Saman
我通过互联网浏览,但仍未找到问题的答案。应该很容易: class Parent { String name Child child } 当我有一个 child 对象时,如何获得它的 paren
我正在尝试创建一个以 Firebase 作为我的后端的社交应用。现在我正面临如何(在哪里?)找到 friend 功能的问题。 我有每个用户的邮件地址。 我可以访问用户的电话也预订。 在传统的后端中,我
我主要想澄清以下几点: 1。有人告诉我,在 iOS 5 及以下版本中,如果您使用 Game Center 设置多人游戏,则“查找 Facebook 好友”(如与好友争夺战)的功能不是内置的,因此您需要
关于redis docker镜像ENTRYPOINT脚本 docker-entrypoint.sh : #!/bin/sh set -e # first arg is `-f` or `--some-
我是一名优秀的程序员,十分优秀!