我最近决定使用SDL作为我的库之一来编写一个C++游戏.在我的程序编写和学习SDL的过程中,我偶然发现了程序中的一个特殊错误,并决定在SSCCE中复制它以确保我没有疯狂.
问题似乎是当我将SDL_RENDERER_PRESENTVSYNC作为标志传递给SDL_CreateRenderer时,我得到了不一致的渲染.为了比较,我运行程序50次,没有标志50次,并且在每种情况下对我的程序进行了唯一的更改.没有标志,显示器100%的工作时间.打开标志后,它只会在50次中成功渲染13次.
这是程序:
#include <SDL2/SDL.h>
#include <iostream>
int main(int argc, char** argv)
{
if(SDL_Init(SDL_INIT_VIDEO) != 0)
{
std::cerr << "Unable to initialize SDL: " << SDL_GetError() << std::endl;
return -1;
}
SDL_Window* win = SDL_CreateWindow("Testing",
SDL_WINDOWPOS_UNDEFINED,
SDL_WINDOWPOS_UNDEFINED,
640, 480, SDL_WINDOW_SHOWN);
SDL_Renderer* renderer = SDL_CreateRenderer(win, -1,
SDL_RENDERER_ACCELERATED |
SDL_RENDERER_PRESENTVSYNC);
SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255);
SDL_RenderClear(renderer);
SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255);
for(int x = 0; x < 640; x+=32)
{
for(int y = 0; y < 480; y+=32)
{
SDL_Rect rect = …Run Code Online (Sandbox Code Playgroud) 我真的很困惑这种类型的指针定义:
char *notes[] = {"Ab", "F#", "B", "Gb", "D"};`.
Run Code Online (Sandbox Code Playgroud)
我理解notes这里是一个指向char的指针数组,我理解为注释'元素应该都是char类型变量的地址.我哪里错了?那么这是如何工作的呢?
#include<iostream>
#include<string>
using namespace std;
int main()
{
char *notes[] = {"Ab", "F#", "B", "Gb", "D"};
cout << *(char**)(notes+2);
}
Run Code Online (Sandbox Code Playgroud)
char**那里的演员是什么?它的意义是什么?
我有代码应该从文件中读取文件名,打开它们,然后进行一些计算.这些文件包含数据列.我已经声明了数组来读取数据.当我在读入之前初始化数组时,包含文件名的字符串表现得不稳定.如果删除了初始化,问题就解决了.
不稳定的行为是:首先声明的字符串不会保留在内存中.在代码中,如果我d[90]先声明,那么稍后的print语句不会打印先前保存的值.可能是什么原因?
这是代码:
#include<stdio.h>
#include<math.h>
main()
{
FILE *data,*model,*filenames;
int i,imax,j,k,l;
float fd[1000],fm[1000],td[1000],tm[1000];
float a;
char d[90],m[90];
k=1;
l=0;
filenames=fopen("filenames.dat","r");
while(fscanf(filenames,"%s %s",d,m)!=EOF)
{
printf("model: %s\ndata: %s\n",m,d);
for(i=1;i<=1000;i++)
{
fd[i]=0;
fm[i]=0;
td[i]=0;
tm[i]=0;
}
printf("datafile name: %s\n",d);
printf("modelfile name: %s\n",m);
data=fopen(d,"r");
for(i=1;i<=1000;i++)
if(fscanf(data,"%f %f %f %f",&td[i],&fd[i],&a,&a)!=EOF)
k++;
else
break;
fclose(data);
printf("modelfile name: %s\n",m);
model=fopen(m,"r");
for(i=1;i<=1000;i++)
if(fscanf(model,"%f %f %f %f %f %f",&tm[i],&fm[i],&a,&a,&a,&a)!=EOF)
l++;
else
break;
fclose(model);
}
}
Run Code Online (Sandbox Code Playgroud)