繁体   English   中英

Cygwin 异常:打开堆栈转储文件

[英]Cygwin Exception : open stack dump file

我正在使用 Cygwin 用 C 语言在 Windows 7 上开发一个 linux 命令解释器。 我的代码正在正确编译和运行,直到出现此错误:

cygwin_exception::open_stackdumpfile:Dumping stack trace to jstack dump

我发现当我尝试将一个值传递给一个函数时,当函数需要一个指针时,我得到了这个错误。

例如:

int arr[] = {1, 2, 3};
int i = 3;
memmove(i, arr, 3);

此代码将获得一个 cygwin_exception::open_stackdumpfile,因为您将 int i(一个值)传递给一个需要内存地址的函数。

然而,这纯粹是基于我的经验,并且这个错误肯定有其他原因。

我今天刚遇到这个问题。 我发现有另一个 cygwin 会话(shell)在后台运行。 它们可能会影响彼此的内存位置/分配。 一旦我杀死了他们两个,打开一个新的,一切都恢复正常! 我希望它有帮助

这适用于 ConEmu 和其他基于 Windows 的终端模拟器,您可能需要将“回滚”或“缓冲区高度”设置为小于 2000。

实际数量取决于终端的宽度。 对我来说,最大化的窗口有 240 个字符,在 cygwin 应用程序开始崩溃之前,它可以支持大约 3200 行“回滚”。

我可以通过运行ls -l -R / | head -n 2000来测试这个 ls -l -R / | head -n 2000或干净终端上的类似输出,并导致 cygwin 应用程序崩溃。

将 char 数组与strcpystrcat连接时,我遇到了类似的问题

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]来解决它

我在尝试使用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));

我在以下示例中收到此错误:

v=d/t;

t 和 d 都被声明为 int; d 被计算;

我忘了表达我们得到(计算)t 的方式。 这让我遇到了那种错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM