诡异问题求助,调用malloc函数之后,一个无关的字符数组的内容被覆盖掉了
本帖最后由 Yamatehhhhhh 于 2017-09-30 17:04 编辑程序代码如下,在外层while循环到第三次时,调用完malloc函数(第16行),发现字符数组buffer的值被修改了,看上去像是被覆盖了。
#include <stdio.h>
#include <stdlib.h>
#define NUMERIC 0
#define OPERATOR 1
int main() {
char buffer[] = "1.5+2*3^4/-5"; // The expression buffer
char *pbuffer = buffer; // The pointer to expression buffer
char *pelements[] = {NULL}; // Restore the elements have been parsed
size_t index = 0; // The index of element is being parse
int type = NUMERIC; // The type of current index, NUMERIC or OPERATOR
while(*pbuffer != '\0') {
int i = 0;
printf("Line %d: %s\n", __LINE__, buffer); // The index for pelements
pelements = (char *)malloc(320); // Alloc memory for pointer
printf("Line %d: %s\n", __LINE__, buffer);
if(type == NUMERIC) {
printf("Line %d: %s\n", __LINE__, buffer);
*(pelements+i++) = *pbuffer++; // Read one char firstly
while(*pbuffer!='-' && *pbuffer!='+' && *pbuffer!='/' && *pbuffer!='*' && *pbuffer!='^' && *pbuffer!='\0') {
*(pelements+i++) = *pbuffer++;
}
*(pelements+i) = '\0'; // Add '\0'
index++;
type = OPERATOR;
} else {
if(*pbuffer=='\0') break;
*(pelements+i++) = *pbuffer++;
*(pelements+i) = '\0';
index++;
type = NUMERIC;
printf("Line %d: %s\n", __LINE__, buffer);
}
}
}
本帖最后由 Yamatehhhhhh 于 2017-09-30 17:05 编辑
程序的执行结果是这样的:
Line 15: 1.5+2*3^4/-5
Line 17: 1.5+2*3^4/-5
Line 20: 1.5+2*3^4/-5
Line 15: 1.5+2*3^4/-5
Line 17: 1.5+2*3^4/-5
Line 35: 1.5+2*3^4/-5
Line 15: 1.5+2*3^4/-5
Line 17:
程序里几行print语句都是一样的,就是打印buffer这个字符数组的值,让人百思不得解的是为什么调用malloc给另一个指针分配内存之后,buffer的值就像被覆盖了一样。 char *pelements[?] 回复 4# hellioncu
一语道破天机,因为不确定数组元素个数,就没有指定数组的大小,指定数组大小后这个问题就解决了,谢谢! 还是自己太随意了啊。
页:
[1]