你好我遇到这个问题的问题是制作一个只使用二叉树头指针和树的所需级别(高度)的函数,如:
int countLevel(tree_type tree, int n)
Run Code Online (Sandbox Code Playgroud)
我已经考虑了一段时间了,我似乎无法找到解决方案而不必在函数中添加另一个值来表示树的运行数/高度(我认为有一种方法来表示它)没有改变功能本身?)
PS我现在在C上编码.
我正在开发STM32F7。当我free()在以下(简化)代码中点击时,会触发一次Hardfault :
typedef struct
{
uint8_t size;
uint8_t* data;
}my_struct;
void foo()
{
my_struct msg;
msg.size = 5;
msg.data = malloc(msg.size);
if(msg.data != NULL)
{
free(msg.data); // Hardfault
}
}
Run Code Online (Sandbox Code Playgroud)
我在GDB中一步一步地free()找到了引起Hardfault的汇编指令:
ldrd r1, r3, [r5, #8]
Run Code Online (Sandbox Code Playgroud)
的值r5就是0x5F0FE9D0
CFSR是,0x8200并且MMFAR和BFAR寄存器都包含0x5F0FE9D8,
看着LDRDR在网络上的问题,我试图添加__attribute__((__packed__))到my_struct定义。当通过指针/结构使用未对齐的内存访问时,应该强制编译器生成2x LDR。
这样,我在运行时不再需要Hardfault。好...
出于好奇,我想在此修改后通过GDB检查地址,并且感到惊讶!没有任何变化(我的意思是关于地址),尽管有了并生成了我的Hardfault(但仅在GDB调试执行中),我最终还是再次命中了LDRD指令packed。
在删除属性并比较MMFAR和BFAR寄存器的值后,我启动了新的运行,当我不在GDB中时,我得到了0x41AFFE60
我正在使用vim,我想替换
&\\ \hline为\\ \hline
Can有人可以教我如何做到这一点吗?
%s/\&\\/\\/gc没用.这是为乳胶桌.
#include <stdio.h>
void wat(void *ptr){
*(int*)ptr = 0x4A424F4B;
return;
}
int main(int argc, char **argv){
FILE *wtf = fopen("wat", "wb");
void *ptr;
wat(ptr);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这实际上编译并没有错误执行,你甚至可以fwrite的内容*(int*)ptr,你会得到0x4A424F4B.但是,当您删除此行时:
FILE *wtf = fopen("wat", "wb");
Run Code Online (Sandbox Code Playgroud)
*(int*)ptr = 0x4A424F4B;会突然导致分段错误.为什么?
我想打印void指针的地址
u32 j;
for (j = 0; j < sizeof(struct queue_header); j += 4)
{
printf("0x%x ",(u32 *)((u32 *)q->q_hdr + j)); //q_hdr is a void pointer
}
Run Code Online (Sandbox Code Playgroud)
但该类型转换给出了错误:
警告:从指针强制转换为不同大小的整数[-Wpointer-to-int-cast]
你能告诉我怎么打印地址吗?
我需要C Primer Plus的练习帮助.
编写一个请求您的名字的程序,并使用它执行以下操作:在比名称宽三个字符的字段中打印它
#include<stdio.h>
#include<string.h>
int main()
{
char a[40];
int p,v=0;
printf("Enter your first name: \n");
scanf("%s",a);
p= strlen(a);
v==p+3;
printf("%s",a);
}
Run Code Online (Sandbox Code Playgroud)
我不知道如何使用什么作为宽度的修饰符我应该在%和s之间添加什么?
int **arkadas;
int **komsu;
komsu = malloc( t*sizeof( int* ));
arkadas = malloc( t*sizeof( int* ));
for(i=0; i<t; i++)
{
x=0;
komsu[i] = malloc( t*sizeof(int) );
arkadas[i] = malloc( t*sizeof(int) );//temporary malloc
for(j=0; j<t; j++)
{
komsu[i][j]=fark(kelime[i],kelime[j]);
if(komsu[i][j]==1)
{
komsuSayisi++;
x++;
arkadas[i][x]=j;
}
}
if(i==2)
{
printf("1. value: %d\n",arkadas[2][2]);
}
arkadas[i][0]=x+1;//size here
if(i==2)
{
printf("2. value: %d\n",arkadas[2][2]);
}
arkadas[i] = (int *)realloc(arkadas[i],x+1);
if(i==2)
{
printf("3.value: %d\n",arkadas[2][2]);
}
}
Run Code Online (Sandbox Code Playgroud)
输出是:
1. value: 150
2. value: 150
3. value: 13243564 (after realloc) …Run Code Online (Sandbox Code Playgroud) 我对此有所研究; 但是,当我尝试在我的代码中实现它时,我没有成功.这是我到目前为止:
f = open('ClassA.txt', 'r')
dictionary = {}
for line in f:
firstpart, secondpart = line.strip().split(':')
dictionary[firstpart.strip()] = secondpart.strip()
f.close()
sorted_dict = {k: sorted(v) for k, v in dictionary.items()}
print (sorted_dict)
Run Code Online (Sandbox Code Playgroud)
ClassA.txt 将包含例如:
Jakub Scored: 10
Dan Scored: 10
Jake Scored: 9
Harry Scored: 5
Run Code Online (Sandbox Code Playgroud)
我希望这些名字按顺序按字母顺序排列.但是,当我打印sorted_dict它时,它会出现:
{'Jakub Scored': ['0', '1'],
'Dan Scored': ['0', '1'],
'Harry Scored': ['5'],
'Jake Scored': ['9']}
Run Code Online (Sandbox Code Playgroud)
不仅不是有序,而且10由于某种原因得分的人被错误地打印(向后).