错过的函数调用的堆栈溢出

时间:2017-04-07 03:52:37

标签: java java-8 stack-overflow function-call

对不起,如果这张贴在其他地方(我找不到任何东西,因为我的问题比较具体),但我理解(或者至少在理论上)错误是什么;我在如何修复它时遇到了麻烦。该代码应该显示合并排序的工作原理;代码运行,但它永远不会命中函数调用" merge" (下面的代码,我知道在进口中调用所有内容都是不好的做法,但它不是主要的项目,所以我不在乎;也许它只是预览,但它是用java编写的。 util。;并导入java.security。;)。

renderList = (dataObj,sectionID,rowId) => {

    return (
      <View style={styles.container}>
        <Row damping={this.state.damping} tension={this.state.tension} onPress={()=>this.deleteItem(rowId)}>
          <View style={styles.rowContent}>
            <View style={styles.rowIcon} />
            <View>
              <Text style={styles.rowTitle}>{dataObj.service}</Text>
              <Text style={styles.rowSubtitle}>Drag the row left and right</Text>
            </View>
          </View>
        </Row>



      </View>
    );
  };

  render() {
    return (
           <ListView
           renderSectionHeader={() => this.renderSectionHeader()}
            key={this.state.dataBlob}
            dataSource={this.state.dataSource}
            renderRow={(data, sectionID, rowID) => this.renderList(data, sectionID, rowID)}
            style={styles.listView}
            renderSeparator={(sectionId, rowId) => <View key={rowId} style={styles.separator} />}
            />
           );
  }
}

如果您需要驱动程序文件,请告诉我。重申一下,问题是它永远不会到达合并函数调用并导致Stack Overflow错误。

1 个答案:

答案 0 :(得分:2)

堆栈溢出的常见原因是错误的递归调用。通常,这是在递归函数没有正确的终止条件时引起的。在你的代码中,第一个递归调用总是使用相同的参数0和(length - 1)调用并且没有终止,它将陷入无限循环。修复你的代码并更新m1的值,使其终止。

考虑数组长度为6:

low = 0 and high = 5
 m1 = 5
sortArray(data, 0, 5);