- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想创建一个封装动态分配数组的结构。它看起来像这样:
typedef struct IntArray {
int *field;
size_t length;
} IntArray;
然后,我有一个创建这样一个 IntArray 结构的函数:
IntArray *createIntArray(size_t length) {
IntArray *output;
if ((output = malloc(sizeof(IntArray))) == NULL) {
return NULL;
}
output->field = calloc(length, sizeof(int));
output->length = length;
return output;
}
主要内容如下:
int main() {
size_t size = 10;
IntArray *test = createIntArray(size);
for (int i = 0; i < size; i++) {
printf("%d\n", test[i]);
}
}
<小时/>
我希望 calloc() 用零初始化内存,但是输出很奇怪:
<小时/>我认为这些数字是内存地址,但它们来自哪里?每次我启动程序时,数字都会发生变化,但保持在 1. 和 6. 位置..
为什么会发生这种情况?
编辑:
我在stackoverflow上不小心混淆了calloc和malloc,问题实际上发生在上面的代码
最佳答案
您正在尝试将结构打印为 int
。如果您打开/打开编译器警告(如果您使用 gcc,则为 -Wall
),一个好的编译器会向您发出警告。
CreateIntArray 创建一个 IntArray
,其中 field
的大小为 length
。如果您想打印分配的 int
数组,您可以使用以下命令:
int main() {
size_t size = 10;
IntArray *test = createIntArray(size);
for (int i = 0; i < size; i++) {
printf("%d\n", test->field[i]);
}
}
关于Calloc() 不分配零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43780743/
这个问题已经有答案了: Do I cast the result of malloc? (29 个回答) 已关闭 8 年前。 有什么区别: int *array; array = (int*) cal
我是一名初学者 C 程序员,我认为情况会是这样,但如果可能的话,我希望得到一些肯定。 如果它们相同,为什么不只取一个参数呢? 最佳答案 calloc(a, b) 和 calloc(b, a) 之间没有
这个问题在这里已经有了答案: Is calloc(4, 6) the same as calloc(6, 4)? (7 个答案) 关闭 3 个月前。 calloc(10,4) 和 calloc(1,
所以calloc()通过向操作系统询问一些虚拟内存来工作。操作系统与 MMU 协同工作,并巧妙地以虚拟内存地址进行响应,该地址实际上映射到 copy-on-write, read-only page
在玩 hashmap 玩具示例的实现时(为了好玩)我发现了一个奇怪的行为,calloc 没有像预期的那样将我想要的整个内存块初始化为零。如果整个内存块都清零,则以下代码应该不会产生任何输出: #inc
我想创建一个封装动态分配数组的结构。它看起来像这样: typedef struct IntArray { int *field; size_t length; } IntArray;
我正在开发一个 C 项目,事实证明,在特定时刻,我调用了 calloc() 函数,它分配了一个已在使用中的内存块。这怎么可能?我检查了我的内存分配使用情况,每次调用 malloc/calloc 时,我
在我的程序中,calloc() 不适用于超过 38 的大小,但小于此数字则可以完美运行。在本例中,我想分配 128 个 int,然后释放它。 怎么了? #include #include #inc
我的main函数有这个: int main() { // double minW, minL, width, length; unsigned tileCap = 10; auto
首先,这是我见过的最奇怪的错误。我不知道发生了什么事。任何人都可以就正在发生的事情提供任何帮助,我们将不胜感激。 我正在编写一个 C 程序,该程序将文件读入动态分配的 block 并在这些 blo
calloc 是否分配返回连续的内存位置?如果是,如果不可用,它会做什么? 最佳答案 Does calloc allocate returns contiguous memory location?
这句话是什么意思? //allocated memory for Device info (*PppsCoreStructure)->psDeviceDetails=(sDeviceDetails *
这是我的代码: #include #include int main(){ int n=10; char *s= calloc(2,sizeof(char)); sprintf(s,"%d",n)
我在 Tiva C launchpad (ARM Cortex M4) 上分配内存时遇到问题,我想做的是在某个时候动态分配指向另一个结构内部结构的指针 calloc() 返回一个指针,该指针的值与存储
我是 C 的新手。 我知道这是正确的: char* Str; Str = (char*)calloc(Str_Len, sizeof(char)); ,但为什么这是不正确的? char* Str; *
我遇到了某种指针冲突, 基本上,在我做的一个函数中, a = calloc(1,28); // gives me 0x100100d10 然后很快在我做的一个子函数中, b = calloc(1,16
这是一段代码。N=70000 或更多时,代码会继续执行 STEP1 并因段错误而崩溃。相反,如果我把例如N=50000,calloc返回NULL,程序退出返回2。那么为什么 N=70000 callo
查看刚刚提出的这个问题:Inconveniences of pointers to static variables那么,这样做会被视为不良做法吗? char* strpart(char* strin
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: Is NULL always zero in C? C 标准为 calloc() 规定了以下内容: The
清零内存有什么优势(即 calloc() 优于 malloc())?无论如何,您不会将值更改为其他值吗? 最佳答案 有两个阵营:一个说在声明变量时初始化变量有助于发现错误。这个阵营中的人确保他们声明的
我是一名优秀的程序员,十分优秀!