【发布时间】:2014-09-14 20:48:20
【问题描述】:
我正在使用 Cygwin 以 C 语言在 Windows 7 上开发一个 linux 命令解释器。 我的代码正在正确编译和运行,直到出现此错误:
cygwin_exception::open_stackdumpfile:Dumping stack trace to jstack dump
【问题讨论】:
标签: c linux cygwin windows-7-x64
我正在使用 Cygwin 以 C 语言在 Windows 7 上开发一个 linux 命令解释器。 我的代码正在正确编译和运行,直到出现此错误:
cygwin_exception::open_stackdumpfile:Dumping stack trace to jstack dump
【问题讨论】:
标签: c linux cygwin windows-7-x64
我发现当函数需要指针时,我尝试将值传递给函数时出现此错误。
例如:
int arr[] = {1, 2, 3};
int i = 3;
memmove(i, arr, 3);
此代码将获得一个 cygwin_exception::open_stackdumpfile,因为您将 int i(它是一个值)传递给一个需要内存地址的函数。
但是,这完全是基于我的经验,当然也可能有其他原因导致此错误。
【讨论】:
我今天刚遇到这个问题。我发现在后台运行了另一个 cygwin 会话(shell)。它们可能会影响彼此的内存位置/分配。 一旦我杀了他们两个,打开一个新的,一切都恢复正常了! 希望对你有帮助
【讨论】:
我在尝试使用 memcpy() 时遇到此错误。问题是我试图将一个数组复制到一个未初始化的指针中。
错误代码:
int array[] = {1, 2, 3, 4, 5};
int *arrPtr = array;
int *mem_ptr = NULL; // this row
memcpy(mem_ptr, array, 5 * sizeof(int));
我是如何解决的:
int array[] = {1, 2, 3, 4, 5};
int *arrPtr = array;
int *mem_ptr = malloc(sizeof(int) * 5); // this row
memcpy(mem_ptr, array, 5 * sizeof(int));
【讨论】:
这适用于 ConEmu 和其他基于 Windows 的终端仿真器,您可能需要将“回滚”或“缓冲区高度”设置为小于 2000。
实际数量取决于终端的宽度。对我来说,最大化的窗口有 240 个字符,在 cygwin 应用程序开始崩溃之前可以支持大约 3200 行“回滚”。
我可以通过在干净的终端上运行 ls -l -R / | head -n 2000 或类似的输出来测试这一点,并导致 cygwin 应用程序崩溃。
【讨论】:
将 char 数组与 strcpy 和 strcat 连接时遇到类似问题
const char *host = "http://myaddress";
const char *uri = "/api/devices/";
const char *changes = "getChanges?";
const char *token = "token=something";
char *link;
strcpy(link, host);
strcat(link, uri);
strcat(link, changes);
strcat(link, token);
puts(link);
在执行strcpy 时出现问题。
我通过将char *link 更改为char link[50] 解决了这个问题
【讨论】:
我在以下示例中遇到此错误:
v=d/t;
t 和 d 都被声明为 int; d 已计算;
我忘了表达我们得到(计算)t 的方式。这让我遇到了这种错误。
【讨论】: