哪个字符有所有零的位表示?
对于上下文,我想知道如何获得所有零的数组和新的c / c ++
unsigned char** result = (unsigned char**) malloc(sizeof(unsigned char)
* rows);
for (int i = 0 ; i < rows ; i++) {
result[i] = (unsigned char *) malloc(sizeof(unsigned char) * cols);
memset(result[i], 0, sizeof(unsigned char) * cols);
}
当我尝试打印位表示时(使用c&amp; 128,c&amp; 64,我仍然得到设置的位)
例如:(对于rows = 3和cols = 2)
00100000 00110111
00000000 00000000
00000000 00000000
答案 0 :(得分:1)
在第一行中,您的malloc正在分配错误的大小。你正在分配一个unsigned char,当你应该分配足够的指针时,如下所示。
unsigned char** result = (unsigned char**) malloc(sizeof(unsigned char *) * rows);
这意味着在循环中分配的早期指针的最重要字节正被后续的malloc结果破坏。因此,当您查看result[i]
时,您实际上并没有真正在内存中查找正确的位置。
答案 1 :(得分:-1)
看起来你滥用了类型
unsigned char**
你把它视为一个数组,但它只是指向unsigned char的指针。 尝试替换
unsigned char** result = (unsigned char**) malloc(sizeof(unsigned char) * rows);
与
unsigned char* result[] = new (unsigned char*)[rows];
然后你就可以对数组中的变量结果进行操作。
并替换
result[i] = (unsigned char *) malloc(sizeof(unsigned char) * cols);
与
result[i] = new unsigned char[cols];
释放内存时,您还需要调用
delete[] result[i];
和
delete[] result;
而不是
free()