重新分配**数组
Reallocating **array
正在创建我的二维数组 char ** 缓冲区。 malloc 部分有效。 realloc 部分正在生成分段错误。
这些是执行以下操作的 2 个函数;
//sets up the array initially
void setBuffer(){
buffer = (char**)malloc(sizeof(char*)*buf_x);
for(int x=0;x<buf_x;x++){
buffer[x] = (char *)malloc(sizeof(char)*buf_y);
}
if(buffer==NULL){
perror("\nError: Failed to allocate memory");
}
}
//changes size
//variable buf_x has been modified
void adjustBuffer(){
for(int x=prev_x; x<buf_x;x++) {
buffer[x] = NULL;
}
buffer=(char**)realloc(buffer,sizeof(char*)*buf_x);
for(int x=0; x<buf_x;x++){
buffer[x] = (char*)realloc(buffer[x],sizeof(char)*buf_y);
strcpy(buffer[x],output_buffer[x]);
}
if(buffer == NULL){
perror("\nError: Failed to adjust memory");
}
}
我猜 buf_x
是全球性的。
您将需要存储原始大小并将其传递给函数。
如果添加元素,需要将新元素设置为NULL,这样realloc
就会成功。
//variable buf_x has been modified
void adjustBuffer( int original){
buffer=realloc(buffer,sizeof(char*)*buf_x);
for(int x=original; x<buf_x;x++){
buffer[x] = NULL;//set new pointers to NULL
}
for(int x=0; x<buf_x;x++){
buffer[x] = realloc(buffer[x],sizeof(char)*buf_y);
}
}
检查重新分配是否失败
//variable buf_x has been modified
void adjustBuffer( int original){
if ( ( buffer = realloc ( buffer, sizeof(char*) * buf_x)) != NULL) {
for ( int x = original; x < buf_x; x++) {
buffer[x] = NULL;//set new pointers to NULL
}
for ( int x = 0; x < buf_x; x++){
if ( ( buffer[x] = realloc ( buffer[x], strlen ( output_buffer[x]) + 1)) == NULL) {
break;
}
strcpy(buffer[x],output_buffer[x]);
}
}
}
正在创建我的二维数组 char ** 缓冲区。 malloc 部分有效。 realloc 部分正在生成分段错误。
这些是执行以下操作的 2 个函数;
//sets up the array initially
void setBuffer(){
buffer = (char**)malloc(sizeof(char*)*buf_x);
for(int x=0;x<buf_x;x++){
buffer[x] = (char *)malloc(sizeof(char)*buf_y);
}
if(buffer==NULL){
perror("\nError: Failed to allocate memory");
}
}
//changes size
//variable buf_x has been modified
void adjustBuffer(){
for(int x=prev_x; x<buf_x;x++) {
buffer[x] = NULL;
}
buffer=(char**)realloc(buffer,sizeof(char*)*buf_x);
for(int x=0; x<buf_x;x++){
buffer[x] = (char*)realloc(buffer[x],sizeof(char)*buf_y);
strcpy(buffer[x],output_buffer[x]);
}
if(buffer == NULL){
perror("\nError: Failed to adjust memory");
}
}
我猜 buf_x
是全球性的。
您将需要存储原始大小并将其传递给函数。
如果添加元素,需要将新元素设置为NULL,这样realloc
就会成功。
//variable buf_x has been modified
void adjustBuffer( int original){
buffer=realloc(buffer,sizeof(char*)*buf_x);
for(int x=original; x<buf_x;x++){
buffer[x] = NULL;//set new pointers to NULL
}
for(int x=0; x<buf_x;x++){
buffer[x] = realloc(buffer[x],sizeof(char)*buf_y);
}
}
检查重新分配是否失败
//variable buf_x has been modified
void adjustBuffer( int original){
if ( ( buffer = realloc ( buffer, sizeof(char*) * buf_x)) != NULL) {
for ( int x = original; x < buf_x; x++) {
buffer[x] = NULL;//set new pointers to NULL
}
for ( int x = 0; x < buf_x; x++){
if ( ( buffer[x] = realloc ( buffer[x], strlen ( output_buffer[x]) + 1)) == NULL) {
break;
}
strcpy(buffer[x],output_buffer[x]);
}
}
}