【发布时间】:2014-08-10 14:57:18
【问题描述】:
我有一个由 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 函数中收到一条警告:线程 1:EXC_BAD_ACCESS(code=EXC_I386_GPFLT)
在运行期间,程序一直运行到 printf 语句并在那里冻结
【问题讨论】:
-
您需要添加更多代码(在调用
snprintf之前),以便我们可以看到您如何分配缓冲区以及有关缓冲区指针类型及其方式的详细信息正在使用。这两行断章取义是不够的,但我的猜测是,您要么正在访问尚未分配的内存,要么正在某处超出缓冲区的末尾。 -
我同意肯。例如,我很想知道指向的缓冲区是如何初始化的,以及是否确保那里总是有一个以空字符结尾的字符串。另外,当bufpointer增加时,你是否确保buffsize减少到剩余空间?
-
我现在添加了更多代码,我不确定如何在每次迭代后减少 buffsize 的值,我还尝试使用 sprint 运行该函数,因为它不需要 buffsize 作为参数,但失败了完全相同的问题