我正在使用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数组与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的方式。这使我产生了那种错误。