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



我正在使用Cygwin在Windows7上用C语言开发一个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)在后台运行。它们可能会相互影响内存位置/分配。有一次我杀了他们两个,开了一个新的,一切都恢复了正常!我希望它能帮助

我在尝试使用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数组与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]

来解决此问题

我在下面的例子中得到了这个错误:

v=d/t;

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

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

最新更新