我已經創建了這個小程序來反轉一個句子。 所以給出:A B C d反向字符串realloc():無效的下一個大小
它會給:d C B A
這工作得很好,直到我添加一個額外的信。如果我嘗試 「ABCDE」 將在最後一個失敗的錯誤
的realloc():無效的下一個大小:0x0000000000602010 *
這裏是我依然代碼
#define MAX_TEXT 100
#include <stdio.h>
#include <string.h> //strlen
#include <stdlib.h> //realloc
int main(int argc, char **argv) {
char text[MAX_TEXT] = { 0 };
char *parts = NULL;
printf("Insert string: ");
fgets(text,MAX_TEXT,stdin);
sscanf(text,"%[^\n]",text); //remove the \n
char **reverse = NULL;
char **extra = NULL;
int size = 0;
int i = 0;
parts = strtok (text," ");
while (parts != NULL) {
size += ((strlen(parts)+4) * sizeof(char));
extra = realloc(reverse,size);
if (extra) {
reverse = extra;
reverse[i++] = parts;
}
else {
printf("Error allocating memory\n");
exit(1);
}
parts = strtok (NULL, " ");
}
while (--i >= 0) {
printf("%s ",reverse[i]);
}
printf("\n");
}
使用指針的新手別指望指針,所以任何幫助都會很棒。 謝謝!我試過使用valgrind,它只是指出在realloc上有什麼錯誤,但我不明白究竟是什麼。
更新的代碼:
#define MAX_TEXT 500
#include <stdio.h>
#include <string.h> //strchr
#include <stdlib.h> //realloc
int main(int argc, char **argv) {
char text[MAX_TEXT] = { 0 };
printf("Insert string: ");
fgets(text,MAX_TEXT,stdin);
//sscanf(text,"%[^\n]",text); //remove the \n <-- Undefined behaviour :D "if copying takes place between objects that overlap, the behavior is undefined."
char *theEnter = strchr(text,'\n');
if (theEnter) {
*theEnter = 0;//remove \n
}
char **reverse = NULL;
char **extra = NULL;
char *parts = NULL;
int size = 0;
int i = 0;
size_t increse_by = sizeof(char *);
parts = strtok (text," ");
while (parts != NULL) {
size += increse_by; //pointer to pointer so increase by the size of new pointer
extra = realloc(reverse,size);
if (extra) {
reverse = extra;
reverse[i++] = parts;
}
else {
printf("Error allocating memory\n");
exit(1);
}
parts = strtok (NULL, " ");
}
while (--i >= 0) {
printf("%s ",reverse[i]);
}
printf("\n");
}
繼查理·伯恩斯表示,我現在分配對於char *,我也去掉了sscanf函數和使用,和strchr刪除\ N,因爲,作爲chux表示,自己在做什麼了未定義的行爲。
感謝您的幫助:)
工作正常。檢查這個鏈接http://ideone.com/ly8ws2 – Arpit
這意味着什麼。 OP得到未定義的行爲 –
當他真的應該爲char *數組分配空間時,OP爲char *和字符串本身分配空間。 –