gpt4 book ai didi

c - printf 导致 EXC_BAD_ACCESS(code=EXC_I386_GPFLT) 警告并在运行时卡住

转载 作者:行者123 更新时间:2023-11-30 15:32:15 25 4
gpt4 key购买 nike

我有一个由 3 个嵌套 for 循环和一个 if 语句组成的函数,里面有:

int buffsize = valuex*3;
//int buffsize = (LEDS+1)*3;
char buffer[buffsize];
init_buf(buffer, buffsize);
// while(counter <= linecount){

int x = 0;
int y = 0;
char *bufpointer=buffer;

for (x=0; x<=valuex; x++) {

for (y=0;y<=LEDS; y++) {

for (int i=0; i<=linecount; i++) {

if (pixels[i].y==y) {

snprintf(bufpointer+=strlen(bufpointer), buffsize, "%s%d%d%d",buffer, pixels[i].r,pixels[i].g, pixels[i].b );
printf("buffer contents: %s\n",buffer);


}

}
printf("buffer contents: %s\n",buffer); //placed for debugging
}

}



/**************** buffer initialiser ********************/

void init_buf(char *buf, size_t size){
int i;
for(i=0; i<size; i++){
buf[i] = '0'; // int to char conversion
}
}

bufpointer 是指向 char 数组缓冲区的指针。

我正在尝试从像素[]结构中读取整数值并将它们全部添加到单个缓冲区中。

我的问题是我在 printf 函数处收到警告,指出:Thread 1: EXC_BAD_ACCESS(code=EXC_I386_GPFLT)

在运行时,程序运行直到 printf 语句并在那里卡住

最佳答案

听起来您正在访问超出数组末尾的内存。

bufpointer+=strlen(bufpointer)buffsize 结合起来看起来很可疑。我假设您正在使用 bufpointer 将多个字符串连接到单个缓冲区中,方法是使每个 snprintf 调用从前一个调用留下的空字节开始写入。如果是这种情况,snprintf 的第二个参数应该是缓冲区中剩余的空间量,而不是缓冲区的大小。例如,如果您有一个可容纳 100 个字符的缓冲区,并且第一个 snprintf 调用写入了 10 个字符,那么对于第二个调用,大小限制应为 90,而不是 100。

您还没有发布足够的代码来显示 bufpointerbuffsize 如何初始化以及它们是否被循环更改,因此不清楚这是问题的原因,但我怀疑是这样。

关于c - printf 导致 EXC_BAD_ACCESS(code=EXC_I386_GPFLT) 警告并在运行时卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24317300/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com