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代码>