kla*_*mse 1 c malloc memory-management segmentation-fault
所以我想一次从stdin读一个字节。while循环的每次迭代都试图重新分配缓冲区,但是我不想使用realloc。这是我尝试过的:
char tempChar = '\0';
char *buffer;
int bufferSize = 0;
buffer = (char*) malloc(sizeof(char));
while((tempChar = getc(stdin)) != EOF)
{
buffer[bufferSize] = tempChar;
bufferSize++;
char *temp = buffer;
buffer = (char*)malloc(sizeof(char)*bufferSize);
memcpy(buffer, temp, sizeof(temp));
free(temp);
}
buffer[bufferSize] = '\0';
Run Code Online (Sandbox Code Playgroud)
我遇到了细分错误。知道为什么会这样吗?
编辑:好的,就像其他人所说的,我修复了两个错误。这是固定版本:
char tempChar = '\0';
char *buffer;
int bufferSize = 1;
int count = 0;
buffer = malloc(sizeof(char));
while((tempChar = getc(stdin)) != EOF){
buffer[count] = tempChar;
count++;
if(count >= bufferSize){
bufferSize *= 2;
char *temp = buffer;
buffer = malloc(sizeof(char)*bufferSize);
memcpy(buffer, temp, count);
free(temp);
}
}
buffer[count - 1] = '\0';
Run Code Online (Sandbox Code Playgroud)
您的缓冲区太小了一个字节。这条线
buffer = (char*)malloc(sizeof(char)*bufferSize);
Run Code Online (Sandbox Code Playgroud)
应该读
buffer = malloc(bufferSize + 1);
Run Code Online (Sandbox Code Playgroud)
请勿malloc()在C中强制使用返回值,并且sizeof(char)按定义是一个返回值。
另外,这是错误的:
memcpy(buffer, temp, sizeof(temp));
Run Code Online (Sandbox Code Playgroud)
那会复制等于a大小的字节数char *。
| 归档时间: |
|
| 查看次数: |
760 次 |
| 最近记录: |