Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 读写动态分配的内存_C_Memory_Heap_Calloc - Fatal编程技术网

C 读写动态分配的内存

C 读写动态分配的内存,c,memory,heap,calloc,C,Memory,Heap,Calloc,我有一些包含以下部分的代码: typedef unsigned long long int ulli_t; typedef unsigned int obj_t; // --- SOME UNIMPORTANT PART OF CODE objects = (obj_t*)malloc(hw*sizeof(obj_t)); objNums = (ulli_t*)calloc(hw, sizeof(ulli_t)); printf("%#x, %#x\n", objects, objNums);

我有一些包含以下部分的代码:

typedef unsigned long long int ulli_t;
typedef unsigned int obj_t;
// --- SOME UNIMPORTANT PART OF CODE
objects = (obj_t*)malloc(hw*sizeof(obj_t));
objNums = (ulli_t*)calloc(hw, sizeof(ulli_t));
printf("%#x, %#x\n", objects, objNums);
// --- SOME UNIMPORTANT CODE
/// NEXT PART IS for-CYCLED
objNums[k] ++;
if (k>=Nobj) {
   objects[k] = obj;
   Nobj++;
   printf(" %lu - %#x - %#x\n", k, objects+k, objNums+k);
};
我得到了这部分代码的输出:

0xaafdf9d8, 0xaad693b0
 0 - 0 - 0xaafdf9d8
 1 - 0 - 0xaafdf9dc
 2 - 0 - 0xaafdf9e0
 3 - 0 - 0xaafdf9e4
 4 - 0 - 0xaafdf9e8
 5 - 0 - 0xaafdf9ec
 6 - 0 - 0xaafdf9f0
 7 - 0 - 0xaafdf9f4
 8 - 0 - 0xaafdf9f8
 9 - 0 - 0xaafdf9fc
 10 - 0 - 0xaafdfa00
 11 - 0 - 0xaafdfa04
所以,这里有一个问题-如果“objects”变量是非零的,那么为什么“objects+k”是零? 当我作出以下决定时:

printf(" %lu - %#x - %#x\n", k, objects[k], objNums[k]);
我的台词是这样的:

value of k - 0 - hex value of objNums[k]
为什么呢?
想到那件事,我的脑子已经碎了。

你正在用%lu打印你的long-long。您应该使用%llu

您正在使用%lu打印您的长文本。您应该使用%llu

您不需要
objects[k]=obj-您确定
obj
在该点不是零吗?是的。我确信obj在当时不是零。我想到了。我刚才把它打印出来了。而且根本不是零。但还有其他一些事情。您可以看到,当k=0时,objNums+k等于以前打印的“objects”指针值,而不是“objNums”值。这让我很困惑。可能代码中缺少了一些重要的部分。应该将对象[k]分配给任何obj。如果看不到更多的代码,就很难分辨。
对象
被声明为
对象
obj
被声明为
obj\t obj你做
对象[k]=obj-您确定
obj
在该点不是零吗?是的。我确信obj在当时不是零。我想到了。我刚才把它打印出来了。而且根本不是零。但还有其他一些事情。您可以看到,当k=0时,objNums+k等于以前打印的“objects”指针值,而不是“objNums”值。这让我很困惑。可能代码中缺少了一些重要的部分。应该将对象[k]分配给任何obj。如果看不到更多的代码,就很难分辨。
对象
被声明为
对象
obj
被声明为
obj\t obj