我是C的初学者.我在想,这是怎么回事malloc.这是一个示例代码,我在试图理解它的工作时写了.
码:
#include<stdio.h>
#include<stdlib.h>
int main() {
int i;
int *array = malloc(sizeof *array);
for (i = 0; i < 5; i++) {
array[i] = i+1;
}
printf("\nArray is: \n");
for (i = 0; i < 5; i++) {
printf("%d ", array[i]);
}
free(array);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
OUTPUT:
Array is:
1 2 3 4 5
Run Code Online (Sandbox Code Playgroud)
在上面的程序中,我只为1个元素分配了空间,但是数组现在包含5个元素.因此,当程序顺利运行而没有任何错误时,目的是什么realloc().
谁有人解释原因?
提前致谢.
程序运行顺利并不意味着它是正确的!尝试5在某种程度上增加for循环(500000例如,应该足够).在某些时候,它会停止工作给你一个SEGFAULT.
这称为未定义行为.
valgrind 也会用类似下面的内容警告你这个问题.
==16812== Invalid write of size 4
==16812== at 0x40065E: main (test.cpp:27)
Run Code Online (Sandbox Code Playgroud)
如果您不知道valgrind检查的是什么:如何使用valgrind查找内存泄漏?.(顺便说一句,这是一个很棒的工具)
这应该有助于您进一步澄清:访问未分配的内存C++
| 归档时间: |
|
| 查看次数: |
375 次 |
| 最近记录: |