我的结构中有一个 DateTime 属性字段。我正在尝试验证输入日期以确保输入的值不是将来的值。
我正在使用以下代码:
public struct Car
{
public DateTime Year
{
get
{
return Year;
}
set
{
if (value > DateTime.Now)
throw new InvalidOperationException("Date cannot be in the futrure");
else
Year = value;
}
}
}
Run Code Online (Sandbox Code Playgroud)
当我现在尝试运行此代码时,我不断收到 StackOverflowException 并显示消息“无法计算表达式,因为当前线程处于堆栈溢出状态”。
关于为什么会这样或者如何解决这个问题有什么想法吗?
-谢谢。
我已经搜索了一整天,但仍然找不到解决我的问题的简单答案:当我在另一个单元格中编辑它时,如何使 JTable 单元格更新它的值?
我想以某种方式使用它,fireTableCellUpdated但我不太明白如何使用它、何时使用、在什么对象上使用。
我想要的是获得某种监听器来监听该值是否发生变化。在这个特定的场景中,我有可编辑的第三列,我在其中存储金额,并且我希望该侦听器自动计算并设置一行中其他单元格中的值。我想出了这样的东西:
@Override
public void tableChanged(TableModelEvent e)
{
BigDecimal withoutTax, tax, withTax;
for(int i = 0; i < table.getRowCount(); i++)
{
BigDecimal amount = new BigDecimal(String.valueOf(table.getValueAt(i, 3)).replace(",", "."));
BigDecimal price = new BigDecimal(String.valueOf(table.getValueAt(i, 4)).replace(",", "."));
withoutTax = amount.multiply(price, new MathContext(2));
table.setValueAt(withoutTax, i, 5);
tax = withoutTax.multiply(new BigDecimal(0.23), new MathContext(2));
table.setValueAt(tax, i, 7);
withTax = withoutTax.add(tax, new MathContext(2));
table.setValueAt(withTax, i, 8);
}
}
Run Code Online (Sandbox Code Playgroud)
但这会导致StackOverflowError我猜测这是因为table.setValueAt激发了tableChanged侦听器,所以它进入了无限循环。
有人可以解释一下我怎样才能做到这一点吗?
只是尝试执行 Hal Daumé III 的 YAHT 手册的练习 3.7(第 31 页),我尝试定义斐波那契函数:
fibo 1 = 1
fibo 2 = 1
fibo n = fibo(n-1) + fibo(n-2)
Run Code Online (Sandbox Code Playgroud)
然后我要求
fibo(3)
Run Code Online (Sandbox Code Playgroud)
并得到:
*** Exception: stack overflow
Run Code Online (Sandbox Code Playgroud)
当我查看练习的解决方案时,我发现了完全相同的代码(不同之处在于该函数被称为 fib 而不是 fibo)。我究竟做错了什么?
(手册是 2006 年的,可能中间语言变了?)(讽刺的是我问 stackoverflow 一个堆栈溢出的问题……)
所以我试图对此代码执行基于堆栈的缓冲区溢出:
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>
void win()
{
printf("well done!");
}
void vulnfunc(){
char buffer[36];
gets(buffer);
printf("Buffer contents are %s\n",buffer);
}
int main(int argc,char**argv){
vulnfunc();
}
Run Code Online (Sandbox Code Playgroud)
所以我用 44 个字节覆盖了 EIP(缓冲区的 36 个字节和额外的 8 个字节)。然后我得到了函数 win 的地址,将其更改0x53e58955为适当的地址,如下所示
\x55\x89\xe5\x53
Run Code Online (Sandbox Code Playgroud)
当我将两个字符串连接在一起作为输入时,它仍然不会调用该win()函数。我尝试添加"BBBB"填充来填充 ebp,但也没有运气。如果有人可以提供一些建议,我将非常感激。
它在 Ubuntu、x86_64 上运行
我为我的项目编写了新代码,当我运行单元测试时,我注意到 dotnet 崩溃了。
但我不知道为什么。因此,我将一些代码移至控制台应用程序并运行它。然后我得到这个输出:
Stack overflow.
Repeat 24047 times:
--------------------------------
at [[ class and method names here ]]
--------------------------------
at [[ class and method names here ]]
Run Code Online (Sandbox Code Playgroud)
一段时间后,出现 StackOverflowException:The runtime refused to evaluate the expression at this time.之后,dotnet 再次崩溃。
就是这样。所以构建过程(编译)是成功的,但 CLR 似乎崩溃了?
这是我的错还是 DotNet 中的错误?
编辑:这是一些代码以及我的问题的解释。这是我网站上的递归错误: https: //dotnetfiddle.net/RD69Mk
我正在写一个休闲扫雷艇,想实现一种方法来跟踪现场空单元格,所以我写了这个算法:
//bigger array was taken to prevent out of range,when init mines and numbers
/*creating mines in 1 to FIELD_NUM range(0 -non-active field,1-active field)
* {
* 0 0 0 0 0 0
* 0 1 1 1 1 0
* 0 1 1 1 1 0
* 0 1 1 1 1 0
* 0 1 1 1 1 0
* 0 0 0 0 0 0
* }
*/
//view is a display vect,x and y are mouse …Run Code Online (Sandbox Code Playgroud) 我正在阅读《The Shellcoder's Handbook》这本书,然后我发现了以下信息:
现代计算机对指令和数据没有真正的区别。如果处理器在应该看到数据时可以收到指令,那么它会很乐意执行所传递的指令。这一特性使得系统利用成为可能。
就在那时我意识到我们的现代系统是多么脆弱:(但这本书有点旧了,所以我做了一些研究,但找不到足够的信息来满足我。是否仍然不存在任何方法可以区分数据和数据指示?
附带问题
典型的汇编文件包含三个段:
.text
.bss
和.data
还有其他方法可以区分这些吗?[无元数据]
stack-overflow assembly cpu-architecture microprocessors penetration-testing
我编写了一个用于反转数组的递归方法。
它产生一个StackOverflowError,我只是不明白为什么。我确信这很简单,但我已经被困在这里两个小时试图修复它。
我的代码:
public static void reverseArray(char[] input, int i, int j) {
char temp;
if (i >= j) return;
else if (i < j) {
temp = input[i];
input[i] = input[j];
input[j] = temp;
reverseArray(input, i++, j--);
}
}
Run Code Online (Sandbox Code Playgroud) 我对 Haskell 比较陌生,并且总体上对编程缺乏经验。一个函数在某些输入上导致堆栈溢出,我不知道为什么。
有问题的函数:
digitSum :: Integer -> Integer -> Integer
digitSum _ 1 = 1
digitSum base x = (x `mod` base) + digitSum base (x `div`base)
Run Code Online (Sandbox Code Playgroud)
在某些输入(例如 10 15、11 121、16 19、3 1234)上它可以工作,而在其他输入(例如 10 456)上它会中断有人可以向我解释一下这一点,以便我将来可以避免它吗?
我有一个类库,主要将字符串记录到文本文件.它的一个方法是LogString(字符串str)所以我只是想知道基于下面的函数,如果我多次调用它超过600次,是否会导致stackoverflow?
public void LogString(string str)
{
try
{
if (filePathFilenameExists())
{
using (StreamWriter strmWriter = new StreamWriter(filePathFilename, true))
{
strmWriter.WriteLine(str);
strmWriter.Flush();
strmWriter.Close();
}
}
else
{
MessageBox.Show("Unable to write to file");
}
}
catch (Exception err)
{
string errMsg = err.Message;
}
}
Run Code Online (Sandbox Code Playgroud)