堆溢出和栈溢出
堆溢出
堆用于存储动态变量。它是进程内存中的一个区域。malloc()、calloc()、resize() 这些内置函数通常用于存储动态变量。
当发生下列情况时会导致堆溢出:
A) 如果我们分配大量动态变量,则会发生这种情况。
int main() {
float *ptr = (int *)malloc(sizeof(float)*1000000.0));
}B) 如果我们持续分配内存却在使用后未释放,则会导致这种情况。
int main() {
for (int i=0; i<100000000000; i++) {
int *p = (int *)malloc(sizeof(int));
}
}栈溢出
栈是一种后进先出的数据结构。它用于存储函数中使用的局部变量。参数通过此函数传递,以及其返回地址。
如果程序消耗的内存空间过多,则会发生栈溢出,因为计算机内存中的栈大小受到限制。
栈溢出发生在下列情况时
A) 如果一个函数自行递归调用无限次,则栈将无法存储大量局部变量,因此会发生栈溢出。
void calculate(int a) {
if (a== 0)
return;
a = 6;
calculate(a);
}
int main() {
int a = 5;
calculate(a);
}B) 如果我们声明大量局部变量或声明大型维度数组或矩阵,可能导致栈溢出。
int main() {
A[20000][20000];
}
广告
数据结构
网络
RDBMS
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP