[英]Why Cygwin stack dump message is different when running in cygwin terminal
[英]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 数组与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]
来解决它
我在尝试使用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.