problem with memory allocation
От | Kjetil Haaland |
---|---|
Тема | problem with memory allocation |
Дата | |
Msg-id | 200411261556.42105.kjetil.haaland@student.uib.no обсуждение исходный текст |
Ответы |
Re: problem with memory allocation
|
Список | pgsql-novice |
Hello all Sorry for asking so many question about this topic, but i don't get it to work. The problem is when i allocate memory for char pointers (char*). I have a function that i run many times in my db. The first time i allocate memory for the char* it is ok, and it is set to the length that i say it should have. In the next round, i give a smaller input and tries to allocate memory for this. The first problem is when i try to print out the pointer after the allocation, but before the insert it is what i inserted the last time i used the function. The second problem, coming from the first, is that it has the length from the first allocation, not the length that i set it to have. Here is some of the code i use: alignres *align = (alignres *) PG_GETARG_POINTER(0); char *first = NULL; char *second = NULL; int secondStart=align->secondString; char tempBuffer[strlen(align->stringBuffer)+1]; elog(NOTICE, "before allocating:first=%s, second=%s", first, second); first = (char*) palloc(sizeof(char)*secondStart); second = (char*) palloc(sizeof(char)*(strlen(align->stringBuffer) -secondStart+1)); elog(NOTICE, "after allocating:first=%s, second=%s", first, second); elog(NOTICE, "length: first=%d, second=%d", strlen(first), strlen(second)); snprintf(tempBuffer, sizeof(tempBuffer), "%s", align->stringBuffer); snprintf(first, secondStart, "%s", tempBuffer); first[strlen(first)] = '\0'; int j=0; for(i=secondStart-1; i < (strlen(align->stringBuffer)); i++) { second[j] = tempBuffer[i]; j++; } second[strlen(second)] = '\0'; pfree(first); pfree(second); I am i doing the allocation correct? Is there any other way to free the memory so first and second is not set to the value that the memory was last used for? thanks -Kjetil
В списке pgsql-novice по дате отправления: