所以我试图弄乱Pygame
模块,并使用pygame.mixer
和pygame.key
。但是,当我运行以下代码块时,它会生成错误。
代码:
import pygame, sys
pygame.mixer.init()
# Assume the sound files exist and are found
kick = pygame.mixer.Sound("kick.wav")
clap = pygame.mixer.Sound("clap.wav")
while True:
keyPressed = pygame.key.get_pressed()
if keyPressed[pygame.K_a]:
pygame.mixer.Sound.play(kick)
if keyPressed[pygame.K_d]:
pygame.mixer.Sound.play(clap)
错误讯息:
*** error for object 0x101008fd0: pointer being freed was not allocated
任何帮助都会很棒!
答案 0 :(得分:2)
您的代码无法正常工作的原因有很多,请参阅下文。
import pygame, sys
pygame.init()
window = pygame.display.set_mode((600,400))
kick = pygame.mixer.Sound("kick.wav")
clap = pygame.mixer.Sound("clap.wav")
while True:
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_a:
kick.play()
if event.key == pygame.K_d:
clap.play()
if event.type == pygame.QUIT:
pygame.quit()
quit()
首先,您必须为要运行的pygame创建一个显示窗口。
window = pygame.display.set_mode((600,400))
第二次,请注意您将一个Sound对象分配给kick和clap变量。这些是具有play()方法的Sound对象,可以使用点运算符引用它。这不是一个错误,只是有点不必要。阅读documentation以查看声音和播放()参数。你可以这样做:
kick.play()
最后,这是一种更传统的事件处理方式。
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_a:
答案 1 :(得分:0)
我尝试了修改后的代码,它可以运行 - Linux Mint,Python 2.7.10
import pygame
pygame.init() # init all modules
window = pygame.display.set_mode((600,400)) # required by event
kick = pygame.mixer.Sound("kick.wav")
clap = pygame.mixer.Sound("clap.wav")
while True:
pygame.event.get() # required by get_pressed()
keyPressed = pygame.key.get_pressed()
if keyPressed[pygame.K_a]:
print "A"
pygame.mixer.Sound.play(kick)
if keyPressed[pygame.K_d]:
print "D"
pygame.mixer.Sound.play(clap)
但是你可以遇到不同的问题我无法帮助你。
答案 2 :(得分:0)
这是一个malloc"双免费"错误。
Multiple people看到了这个错误,在查看了很多网站之后,他们基本上也说了同样的话:
当您在调试器中断时,您将了解对象是什么。只需查看调用堆栈,您就会找到释放它的位置。那将告诉你它是哪个对象。
设置断点的最简单方法是:
- 转到“运行” - >显示 - >断点( ALT - 命令 - B )
- 滚动到列表底部并添加符号
醇>malloc_error_break
以上是链接链接的接受答案。