忽略编程风格和devise,调用堆栈上分配的variables是否是“安全的”? 例如: int nAmount; delete &nAmount; 要么 class sample { public: sample(); ~sample() { delete &nAmount;} int nAmount; }
我正在执行我的a.out文件。 执行后程序运行一段时间,然后退出消息: **** stack smashing detected ***: ./a.out terminated* *======= Backtrace: =========* */lib/tls/i686/cmov/libc.so.6(__fortify_fail+0x48)Aborted* 可能的原因是什么?如何纠正?
如果我在C ++应用程序中全局声明一个数据结构,它会消耗堆栈内存还是堆内存? 例如 struct AAA { …/…/. ../../.. }arr[59652323];
我已经编程了一段时间,但主要是Java和C#。 我从来没有必要自己pipe理记忆。 我最近开始使用C ++进行编程,对于什么时候应该将东西存储在堆栈以及何时将其存储在堆中,我有点困惑。 我的理解是,被频繁访问的variables应该被保存在堆栈中,对象,很less使用的variables和大型的数据结构都应该被保存在堆中。 这是正确的还是我不正确?
在IE浏览器中,我发现一些客户端的Javascript堆栈溢出问题,这是发生在第三方库内部的一些函数调用,由于某些原因,他们偶尔在IE中制动,因为它的栈限制很低。 然后,我编写了一个小testingHTMLtesting一些浏览器的堆栈大小限制,发现IE8实际上有一个小的堆栈限制,如果与在Windows 7操作系统,8GB RAM的笔记本电脑上运行的FF 7或Chrome 14: <html> <body> <!– begin Script: –> <script type="text/javascript"> function doSomething(){ var i = 3200; doSomethingElse(i); } function doSomethingElse(i){ if (i == 0) return -1; doSomethingElse(i-1); } doSomething(); </script> <!– END OF PAGE –> </body> </html> IE的引发堆栈溢出时,值为3200左右,Firefox和Chrome可以处理一个非常深的recursion,如果比较IE浏览器。 我想知道是否有一种方法可以将堆栈溢出exception与在IE或任何其他浏览器中在运行时引发它的Javascript函数绑定在一起,并且如果它可以在堆栈中使用函数链的堆栈跟踪错误被提出。
为什么下面的代码在运行时没有任何崩溃? 而且大小完全取决于机器/平台/编译器!! 我甚至可以在一台64位机器上使用200个。 如何在操作系统中检测到主函数中的段错误? void main(int argc, char* argv[]) { int arr[3]; arr[4] = 99; } 这个缓冲空间从哪里来? 这是分配给一个进程的堆栈吗?
我使用ServiceStack序列化和反序列化一些对象到JSON。 考虑这个例子: public class Container { public Animal Animal { get; set; } } public class Animal { } public class Dog : Animal { public void Speak() { Console.WriteLine("Woof!"); } } var container = new Container { Animal = new Dog() }; var json = JsonSerializer.SerializeToString(container); var container2 = JsonSerializer.DeserializeFromString<Container>(json); ((Dog)container.Animal).Speak(); //Works ((Dog)container2.Animal).Speak(); //InvalidCastException […]
以下代码为我生成堆栈溢出错误 int main(int argc, char* argv[]) { int sieve[2000000]; return 0; } 我如何解决这个问题? 我正在使用Turbo C ++,但想保持我的代码在C中 编辑: 感谢您的build议。 上面的代码只是例如,我实际上声明在一个函数中的数组,而不是在主要的。 此外,我需要将数组初始化为零,所以当我使用malloc的时候,我发现calloc对我来说是完美的。 malloc / calloc也有优势,而不是在堆栈上分配,允许我使用variables声明大小。
我问了这个问题,以了解如何增加JVM中的运行时调用堆栈大小。 我已经得到了一个答案,而且我也得到了很多有用的答案和评论,这些答案和评论与Java如何处理需要大型运行时堆栈的情况相关。 我已经回答了问题的总结。 最初我想增加JVM堆栈的大小,所以像没有StackOverflowError运行的程序。 public class TT { public static long fact(int n) { return n < 2 ? 1 : n * fact(n – 1); } public static void main(String[] args) { System.out.println(fact(1 << 15)); } } 相应的configuration设置是具有足够大的值的java -Xss…命令行标志。 对于上面的程序TT ,它可以像OpenJDK的JVM一样工作: $ javac TT.java $ java -Xss4m TT 其中一个答案也指出-X…标志是依赖于实现的。 我正在使用 java version "1.6.0_18" OpenJDK […]
为什么Java向量被认为是遗留类,已经过时或被弃用? 使用并发时,它的使用是否有效? 如果我不想手动同步对象,只想使用线程安全的集合,而不需要创build底层数组的新副本(就像CopyOnWriteArrayList那样),那么使用Vector吗? 怎么样Stack ,这是Vector一个子类,我应该用什么来代替它呢?